refactor converters

In preparation for adding new definition and value sources (argparse, python modules, ...) I've refactored the converters.  They're now sorted into to types: to string and from string.  Both types now have dispatch functions that will relieve clients of this module from having to find the appropriate converter manually.
If `as_bare_value()` causes an `AttributeError` it'll get swallowed here. Are you using the exception to guard against it not having a `.as_bare_value()` method? Can it maybe be replaced with `if val.value.hasattr('as_bare_value'):`?