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.