Add callbacks for publish acked, published and reshape API as retrieving result from AsyncResult.get() (fix #38)

It's kind of large commit, since the small commits are hard to resolve merge conflicts while creating this PR.
### Give user 3 options to listen for callbacks for async send task operations ###

1.  After task sent (fix #38 )
2.  After task sent and ack-ed (fix #38 )
3. To fit original celery behavior that `task.apply_async()` to get the `AsyncResult` first, then `AsyncResult.get()` to get actual task result in tornado asynchronous fashion

See updated README.rst for api usage details.

### Functional quality ###
* All function tests are passed, including amqp, redis backend
* Works in connection pool where connections >= 2
* Works in re-connect scenario, including features as wait for publish ack...etc.
* If no backend is configured, behaves the same as original celery that uses DisabledBackend