Track ActiveRecord::Relation shards

This is a big pull request. Sorry!

The problem I am trying to solve is that ActiveRecord::Relation objects do not know which shard they should run on. For example:

    u = User.using(:canada).last
    f = u.friends

    # Now do something that changes Friend.connection_proxy.current_shard
    number_of_brazil_friends = Friend.using(:brazil).count

    # This probably executes on :master, or maybe :brazil, not :canada
    num_canada_friends = f.count

Many of the early commits are clean-up and refactoring. The rationale for each commit is provided in the comments for that commit.

The last two commits in this pull request are really the meat of the pull request. They fix the problem described above by adding

* Sharding support for ActiveRecord::CollectionAssociation and ActiveRecord::CollectionProxy
* A new class called Octopus::RelationProxy, which behaves much like Octopus::ScopeProxy.