Refactor AssociationMatcher

AssociationMatcher was getting much too long and bloated as we continue to add more functionality. Here we've:

* extracted out the `.through`, `.order`, and `.dependent` options as their own submatchers
* expanded upon the `.order` and `.dependent` tests so that we're not only checking that matcher actually matches the right thing, but also that it's outputting the correct failure message.