Refactor reflections from sub classes to delegates

This change is the beginning of a larger refactoring to move reflections from sub classes to delegates. Instead of forcing all associations be an `AssociationReflection` and checking the type on the `@macro` instance var we can now have named reflections; `HasManyReflection`, `HasOneReflection`, `BelongsToReflection`, and `HasAndBelongsToManyReflection`. :sweat_smile: 

The refactoring also removes the `@collection` instance variable by explicitly setting `collection?` to `false` by default and then setting it to `true` in both HM and HABTM.

Methods shared between `ThroughReflection`, `AssociationReflection`, and `MacroReflection` have been moved to a new `ReflectionMethods` class.

Reflection tests in `activerecord/test/cases/reflection_test.rb` had to be somewhat changed and rewritten since we no longer accept unknown macro types, HABTM isn't used internally, and we now construct the Reflections a little differently.

This does not remove the `@macro` instance var just yet but we are working towards that. 

cc/ @tenderlove

(p.s. I can squash just don't like to do it before review :smile_cat:) 
@egilburg `ThroughReflection` used to inherit from `AssociationReflection`. We've split them up because part of the goal is to not rely on the association reflection on through reflections to avoid checking `:macro == :belongs_to`, etc all over the place. 

I could move them to a reflection method module. I'd rather leave that to later though, this is far from done and I'm sure other methods will end up in there making it clear it's time to move it. 

If the consensus feels strongly about moving it I won't object.