First pass at allowing generation of status to happen asynchronously within Tucker.
GrahamA/Mehul: add an AsyncComponent class that can handle wrapping a normal component, but retrieve and store the result on a different thread.
GrahamA: organise imports.
GrahamA: pull staleness limit into a field, to be more easily parameratised.
GrahamA: reorganise test methods, add test cases for some happy paths.
GrahamA: add test case for when wrapped component throws exception. Introduce thin wrapping of Semaphore for test readability.
GrahamA: test case to ensure the component is rescheduled even if update hook throws an exception.
GrahamA: add a test to ensure underlying executor is stopped.
GrahamA: some tidy-up, renames.
GrahamA: convert multiple static methods to a builder.
GrahamA: handle exceptions in async status page generator when stopping async components.
GrahamA: fix some names.
GrahamA: refer to interface instead of concrete class.
Merge pull request #7 from tim-group/async-checking

Allow components that will check their status asynchronously