Move lint infrastructure and individual lints into separate files
Rename lint::Lint to lint::LintId

So that we can introduce a trait named Lint.
Convert lints to a trait-based infrastructure

The immediate benefits are

* moving the state specific to a single lint out of Context, and
* replacing the soup of function calls in the Visitor impl with
  more structured control flow

But this is also a step towards loadable lints.