Extracted a shared superclass for the various long running operation implementations.
Some javadocs.
Implemented BuildActionExecuter.run(ResultHandler) to allow build actions to be run asynchronously

- Change the API of `AsyncConnection` so that it accepts an action to run against a `ConsumerConnection`
- Cranked up the unit test coverage for concurrency.
Removed getVersionDetails() from AsyncConnection and ConsumerConnection.