Multi backend proposal

Hi @ask ,

This is initial version of the backend allows to publish tasks to multiple workers and receive multiple replies. Of course, it's not ideal, and contains some hacks, but I'll improve it; and I'm asking for the guidance from your side since you're actually the person who knows what should be in Celery, and what shouldn't.

In the next comment I'll show some examples how it works.

(I made a checkout from v3.1.11 tag, probably that's why all those commits are here, ignore everything except the latest please)

My plans are:
- [ ] cleanup the code
- [ ] provide basic tests for multi backends
- [ ] `expected_replies` should also handle a list of hostnames, from whom we are expecting replies
- [ ] `MultiAsyncResult` should be able to work with non-multi backends
- [ ] `MultiAMQPBackend` should be able to work with `AsyncResult`
- [ ] `MultiAMQPBackend` should properly work with `canvas`
- [ ] provide advanced tests for multi backends
- [ ] implement multi backends for other built-in backends