A number of fixes and cleanup

The argument for mini-libs is two fold.

1. Understanding how a library works should be put in the doc comments for the lib
2. Keeping classes in `src` allows a very simple view of dependencies between classes. 

Keeping the top-level lib as just a place to explicitly export visible members is a very clean convention. Something I think we should encourage.