StataReader: Support sorting categoricals

Looping across columns is not necessarily particularly slow - what is slow is doing the following:

```python
df[col] = df[col].some_op_that_changes_column_data_type()
```

What I've found works much, must better is to simply do something like

```python
columns = []
for col in df:
    columns.append([col, df[col].some_op_that_changes_dtype()])
df = DataFrame.from_list(columns)
```

Better is to test whether you need to change the col, and when not, is can just be assigned by value to the list.