BUG: Strings like '2E' are incorrectly parsed as valid floats
A work colleague, David Chase, encountered some surprising behaviour, which can be reduced to the following.  The data-frame

```
DataFrame({'x': [2.5], 'y': [42], 'z': ['2E']})
```

does not round-trip correctly.  The string '2E' is interpreted as a valid float, but it should not be (according to man strtod(3), which seems a reasonable spec).

This PR changes the three variants of `xstrtod()` to reject a string where no digits follow the 'e' or 'E', and includes tests for this case.
