Ability to change query_context when joining
I'm presuming the raw SQL produced should be something like this, which shows it's possible:

``` sql
SELECT
    a.title
FROM
    article a,
    INNER JOIN news_feed nf ON a.news_feed_id = a.uuid
    INNER JOIN article_state ars ON ars.article_id = a.uuid
WHERE
    nf.enabled = 1
    AND ars.state = 'a'
GROUP BY
    a.title
HAVING
    COUNT(ars.article_id) > 0
```
 You can use [.switch()](http://docs.peewee-orm.com/en/latest/peewee/api.html#Query.switch) to switch the query context. I believe that's what you're looking for.
 Awesome, was looking for change instead of switch. Hate it when that happens! And with the docs literally just below where I was looking!

Hi Charles,

Just been writing a query that I think should be functionally possible in SQL but isn't currently supported in peewee.

The query is looking to select any articles that are in an enabled news feed, with at least one entry with a specific state in the article_state table.

``` python
class NewsFeed(Model):
    uuid = UUIDField(primary_key=True)
    enabled = BooleanField()

class Article(Model):
    uuid = UUIDField(primary_key=True)
    title = CharField()
    news_feed = ForeignKeyField(NewsFeed)

class ArticleState(Model):
    state = CharField(choices=('a', 'b', 'c'))
    article = ForeignKeyField(Article)

# Create and populate..

recent_articles = Article.select(
        Article.title
    ).join(NewsFeed).join(ArticleState).where(
        (NewsFeed.enabled == True) & (ArticleState.state == 'a')
    ).group_by(
        Article.title
    ).having(fn.Count(ArticleState.article) > 0)
```

That query throws the following error:

```
Traceback (most recent call last):
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py", line 808, in __bootstrap_inner
    self.run()
  File "/Library/Python/2.7/site-packages/cherrypy/process/plugins.py", line 485, in run
    self.function(*self.args, **self.kwargs)
  File "/Users/alexlatchford/Code/abbreviate/a8-aggregate/a8_aggregate/../a8_aggregate/tasks/sync_feeds.py", line 40, in sync_feeds
    load_cache(cached_articles)
  File "/Users/alexlatchford/Code/abbreviate/a8-aggregate/a8_aggregate/../a8_aggregate/tasks/sync_feeds.py", line 27, in load_cache
    ).join(NewsFeed).join(ArticleState).where(
  File "/Library/Python/2.7/site-packages/peewee.py", line 241, in inner
    func(clone, *args, **kwargs)
  File "/Library/Python/2.7/site-packages/peewee.py", line 1752, in join
    self._query_ctx, model_class))
ValueError: No foreign key between <class 'a8_aggregate.database.NewsFeed'> and <class 'a8_aggregate.database.ArticleState'>
```

I understand the problem is the ordering of the `join()` calls and I'm wondering if there is a different way to write this query to achieve the results I'm after. For the meantime I'm going to write it as two queries but it's obviously not ideal :(

Cheers,
Alex
