Eliminate duplicate logic between execute and queue
Support Asynchronous Callbacks with RxJava Integration

https://github.com/Netflix/Hystrix/issues/123

- refactored HystrixCommand to use Observable inside the implementation to be non-blocking and callback driven
- observe() and toObservable() public methods added
- HystrixCollapser not yet changed
Upgrade to RxJava 0.8.4

- pick up concurrency fix to ScheduledObserver https://github.com/Netflix/RxJava/pull/269
Ordering of log now records in order of execution, not completion
Fix non-deterministic test

- it is relying on scheduling of the collapser timer
- this is an example so specifically should not be refactored to use artifical time
Upgrade to RxJava 0.9.0
Merge branch 'observe-rxjava' of https://github.com/benjchristensen/Hystrix into rxhystrixnj
Fix timeout issue when start time has not been set by the winning thread while other threads working of the Cached wrapper are already waiting on the result
Fix bugs related to toObservable behavior with RequestCache disabled.
add a clarifying comment
Upgrade HystrixCollapser to use RxJava and execute reactively
Javadocs for observe and toObservable
Concurrency fixes for race condition occurring when RequestCollapser is shutdown
Merge remote-tracking branch 'upstream/master' into version_1_3-rxjava

Conflicts:
	gradle.properties
	hystrix-core/src/main/java/com/netflix/hystrix/HystrixCommand.java
Refactor HystrixCollapser into multiple implementation classes to simplify reasoning

… done while hunting down concurrency bug ...
Fix concurrency bug in RequestBatch for HystrixCollapser

A short-cut return was before the try/finally. With thread interleaving one thread could get the readLock and never release it and then the execute/shutdown methods would block indefinitely trying to get the writeBlock.

I don't know for sure that this was the bug I've been hunting but the symptoms that could occur from this exactly match what happened.
Reduce logging

- change logger.error to logger.debug on noisy logs
- improve wording on message where a command has failed and the fallback failed
- logger.error is not needed since everywhere that it would be valuable throws a HystrixRuntimeException which will be handled or logged elsewhere
Assert that cancelling/unsubscribing a single collapsed request doesn't cancel batch
Remove non-applicable unit tests

This functionality of aggressive starts from a blocking request has removed for now since we've moved to a completely async model.

If testing shows we still need/want this for performance optimizations we can add it back in.
Merge remote-tracking branch 'upstream/master' into version_1_3-rxjava

Conflicts:
	gradle.properties