Facade for {@link IDataStore} that does the actual saving in worker thread.
Creates an {@link Entry} for each triple (sessionId, pageId, data) and puts it in{@link #entries} queue if there is room. Acts as producer.
Later {@link PageSavingRunnable} reads in blocking manner from {@link #entries} and saves eachentry. Acts as consumer.
It starts only one instance of {@link PageSavingRunnable} because all we need is to make the pagestoring asynchronous. We don't want to write concurrently in the wrapped {@link IDataStore}, though it may happen in the extreme case when the queue is full. These cases should be avoided.
@author Matej Knopp