Add API docs

Semver requires that the API be documented. Thus, the quick doc
generation. Using codo because it actually parses the source and
silly comments are not required.

Updated several classes to better reflect their actual public API.
They were going to be updated anyway, just seemed like a good
idea to do it with the docs generation.