First pass at removing some code smells. This time specifically some redundant code.

* Remove unnecessary and redundant references to self (except where we are explicitly setting an attribute)
* Define Base.parse() to raise an error if the subclass hasn't overriden it
* Remove definition of analysis() on each subclass, and instead define a smarter version in the Base
* Inline documentation on returns for several methods that was missing it
* Misc cleanup and standardization