Code tweaks / documentation

- made several classes abstract, since they're not intended to be
instantiated
- added some documentation comments
- fixed some whitespace