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.
I agree that python ~= "ask for forgiveness than permission" but in this case I think rule number 2 of python is more important. "Explicit is better than implicit.". Catching big builtin exceptions doesn't tell the reader what might go wrong. A reader might see that code and (incorrectly) think "Ah, it must mean that the as_bare_value() function might throw an AttributeError". An if statement with `hasattr()` wouldn't have that ambiguity. 

Now we're really splitting hairs. This discussion is no argument against progress. Just two python nerds learning and having fun by debating code.