coerce provides more informative error on bad datashape

```Python
In [1]: !head bad.csv
a,b
1,2
3,4
1,3.14

In [2]: from blaze import *

In [3]: csv = CSV('bad.csv', nrows_discovery=2)  # only look at the first couple of rows

In [4]: csv.dshape  # Note that we discover an incorrect datashape
Out[4]: dshape("var * { a : int64, b : int64 }")

In [5]: list(csv)
ValueError: DataShape mismatch.
DyND failed to parse data with the following datashape: 3 * { a : int64, b : int64 }
Produced the following error: cannot cast string "3.14" to int64
Consider providing a more general datashape with keyword dshape=

In [1]: !head bad-datetimes.csv
a,b
1,10-10-2010
1,10-10-2010

In [2]: from blaze import *

In [3]: CSV('bad-datetimes.csv')
ValueError: Automatic datashape discovery failed
Discovered the following datashape: { a : ?int64, b : ?date }
But DyND generated the following error: could not convert the object dshape("{ a : ?int64, b : ?date }") into a dynd type
Consider providing type hints using typehints={'column-name': 'type'}
like typehints={'start-time': 'string'}
```