code: def stack(self, key, labels=None):
          
          rows, labels = [], labels or self.labels
          for row in self.rows:
              [rows.append((getattr(row, key), k, v)) for k, v in row.asdict().items()
               if k != key and k in labels]
          return type(self)([key, 'column', 'value']).with_rows(rows)
docs: Takes k original columns and returns two columns, with col. 1 of
          all column names and col. 2 of all associated data.