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

Unused method argument - `file`. If it's necessary, use `_` or `_file` as an argument name to indicate that it won't be used. You can also write as `violation_messages(*)` if you want the method to accept any arguments but don't care about them.