It seems like the string conversion is the real slow bit:
```
>>> t0=time.time(); dtmp = [[i for i in data.item(j)] for j in range(len(data))]; print time.time() - t0
0.0318548679352
>>> t0=time.time(); dtmp = [[str(i) for i in data.item(j)] for j in range(len(data))]; print time.time()-t0
1.43106102943
>>> t0=time.time(); dtmp = numpy.array([[str(i) for i in data.item(j)] for j in range(len(data))]); print time.time()-t0
1.54542899132
>>> t0=time.time(); dtmp = [[x for x in data.field(k)] for k in names ]; print time.time() - t0
0.0290760993958
>>> t0=time.time(); dtmp = [[str(x) for x in data.field(k)] for k in names ]; print time.time() - t0 
1.47440385818
>>> t0=time.time(); dtmp = numpy.array([[str(x) for x in data.field(k)] for k in names ]).T; print time.time() - t0
1.50754714012
```
But unfortunately, it seems to be required if we want to make a numpy array:
```
>>> dtmp = numpy.array([[x for x in data.field(k)] for k in names ]).T
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: setting an array element with a sequence.
>>> dtmp = numpy.array([[i for i in data.item(j)] for j in range(len(data))])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: setting an array element with a sequence.
```
However, another option would be to just sever the parallelism between FITS and ASCII entirely.  I already store an `isfits` attribute, so we can just have the get method use data.field(col)[index] directly, and not even try to have it stored in any kind of array.  I'm thinking this is really the best option here.