Support for joins on a Collection for filtering

A common frustration I have with Pheasant is it's lack of ability for easy joins at a Collection level, making it very hard to filter a collection by some sub-relationship. 

This pull request implements collection-level joins.

```php
<?php

// find posts where the author is an admin
$posts = Post::all()
  ->join(array('Author'))
  ->filter('Author.isadmin = 1');

// find posts where the author has a specific interest
$posts = Post::all()
  ->join(array('Author'=>array('Interests')))
  ->filter('Interests.key = "Llama Herding"');
```

The above are implemented with a combination of joins and groupBy clauses.

Note that this is distinct to the forthcoming `with()` support, which is basically a performance hack to solve the N+1 problem.