Use parser gem instead of ripper.

The `parser` gem provides a higher level of abstraction with hooks _around_
things like class definition, module definition & method definition. This
should make it easier to support more complex cases which would've been
awkward using `ripper`.
Handle instance method defined on namespaced class.
Handle simple class & module method scenarios.
Handle class methods when singleton class is re-opened.
Handle class method defined with explicit ref to another class.
Do proper resolution of constants i.e. classes & modules.

Extract a new `Scope` class.

There's still lots of horrible duplication and test coverage needs to be
improved, but all the specs pass and we're heading in the right direction.
Simplify code by introducing Scope::Root & Scope::Null.
DRY up MethodFinder by extracting Scope#for method.
DRY up MethodFinder by extracting #singleton_scope_for method.
DRY up MethodFinder by extracting #lines_for.

A better solution might be to extend the `parser` gem to make the last line
number for the source of an expression available directly from an expression.
DRY up MethodFinder by extracting #with_scope method.
DRY up MethodFinder by aliasing #on_module to #on_class.