Re-factor StyleGuide for ease of type addition

This change makes it easier to understand `StyleGuide::Base` inheritance. The template method pattern makes it easy to scale style guides to scale horizontally: just add the new language style guide and inherit off of `Base`.

Changes:
* promote `Line` to a class
* add `Violations` object to manage unique violations
* refer to modified lines as changed to make it easier to reason about

Thought about it, but didn't want to cause additional diff noise. I'm thinking we should be changing those only if we touch the line.