Update discovery

This code is pretty ugly.  I think it's getting less ugly but it's still pretty incomprehensible.

It does works significantly better though...
The logic above here is mostly for cases in which we have same length rows.  In those cases we can be much more aggressive in our uniting. In particular we use `unite_base` which calls `lowest_common_dshape` which forces things into a common shape, e.g. 

```Python
In [3]: from datashape.discovery import unite_base

In [4]: from datashape import *

In [5]: unite_base([int32, float64])
Out[5]: dshape("2 * float64")

In [6]: unite_base([int32, float64, string])
Out[6]: dshape("3 * string")
```

We're only comfortable doing this when we have the extra signal that things appear to be columnar