Remove base.py, split core into api and loc, exception cleanup

I can't remember there being any real purpose of the base
module. It was mostly acting as a place to contain stuff
that really shouldn't be contained there, and was otherwise
doing what should be in the __init__ module.

Core code that was in the base module is now split into the
new api and loc(alization) modules. This also cleans up needless
exception boilerplate and is the beginning of a more clean and
standardized exception hierarchy.
Update and expand README and add a bit of history