cache config that pipeline is executing and return it when getConfig() is
called
* Introduced HistoryDatastore interface and 1 implementation: MemoryHistoryDatastore.
* Cleaned up ExperimentDb not to use caches - we don't need to cache anything there, as we're using HistoryDatastore.
* Changed DisplayMediator to use HistoryDatastore to display historical data. NOTE: that it still maintains the list of all unique subjects (to display all-time best performers) which may leak memory. This will be fixed later.
Extend PipelineSynchronizer interface to have methods to allow a caller to
sync with the pipeline points and add a synchronizer that will block the
pipeline only at the end of the iteration.
Minor refactoring:
* Renaming MemoryDatastore -> InMemoryDatastore
* Using Lists instead of arrays in Datastore/Historydatastore interface.
- combine state and iteration count into an encapsulated synchronized object
- plumb guice injection scoped at PipelineScope.
- plumb state updates through Pipeline, PipelineIteration, and
  PipelineSynchronizers.
- remove pipeline state exported metric.
- move iteration count incrementing to the top of the iteration in preparation
  for restarting the iteration.
- move iteration finalize hook up to Pipeline such that it waits once the
  iteration has been written to the datastore.

test fixes too.
save the actual new iteration instead of the currentIteration value to
currentIteration in run()
Merge remote-tracking branch 'upstream/master'

Conflicts:
	src/main/java/org/arbeitspferde/groningen/Pipeline.java
	src/main/java/org/arbeitspferde/groningen/config/DatastoreConfigManager.java
Fetch and merge upstream.