Enum extension + some other scraping fixes

why not just create an ordered dict and iterate over it, trying to cast each time and then just return a string if nothing matches?

```
od = ordereddict()
od['int'] = int
od['float'] = float
od['complex'] = complex

for k, v in six.iteritems(od):
    try:
        v(stringy_val)
        return k