BUG: Bug in csv parsing when passing dtype and names and the parsed data is a different data type (GH8833)
closes #8833 

```
In [5]: data = """1.0,a
   ...: nan,b
   ...: 3.0,c
   ...: """

In [8]: read_csv(StringIO(data),sep=',',names=['A','B'])
Out[8]: 
    A  B
0   1  a
1 NaN  b
2   3  c

In [9]: read_csv(StringIO(data),sep=',',names=['A','B'],dtype={'A' : int})
ValueError: cannot safely convert passed user dtype of <i8 for float64 dtyped data in column 0
```

@cpcloud 
ok, I put a more informative error message up (so your original example will pass thru just fine, converting to int, this is a non-convertible case)
 Course numpy is annoying (this is 1.9.1). You would think that the casting a == float to an int is safe :)

```
In [3]: np.array([1.0,2.0,3.0]).astype('i8',casting='unsafe')
Out[3]: array([1, 2, 3])

In [4]: np.array([1.0,2.0,3.0]).astype('i8',casting='safe')
TypeError: Cannot cast array from dtype('float64') to dtype('int64') according to the rule 'safe'

In [5]: np.array([1.0,np.nan,3.0]).astype('i8',casting='unsafe')
Out[5]: array([                   1, -9223372036854775808,                    3])

In [6]: np.array([1.0,np.nan,3.0]).astype('i8',casting='safe')
TypeError: Cannot cast array from dtype('float64') to dtype('int64') according to the rule 'safe'
```

cc @mwiebe 
 The tricky thing here is that NumPy only has the types to make this determination, not the values, so from the perspective of only knowing that it is float -> int, it is not a safe cast. The error mode in dynd is an attempt to provide a value-based way to handle this, by inserting code to check the values as float is converted to int.
 @mwiebe and that is exactly what I do

will be trying out dynd for real with ?int64 after pydata
when I have some time!
