Follow patterns
Move init to top of class
Change asserts to more meaningful exception types
Refactor hard-to-read fn
Change DescriptionLocator to DefinitionLocator