Feature/issue 358 idle state

Fix for #358  - Invalid state of Push replicator between IDLE and RUNNING under continuous mode


Solutions
1. Add state-machine trigger from IDLE to RUNNING
2. Extends LinkedBlockingQueue to support queue event listener
3. Call waitForPendingFuture() method and switch state from IDLE to RUNNING if necessary whenever Future task is added into pending queue.
4.  Switch state from RUNNING to IDLE if necessary at end of waitForPendingFuture() method
In case of calling fireTrigger(ReplicationTrigger.BEGIN), if state is not IDLE, is the trigger ignored? If so, it is safe to just call fireTrigger(ReplicationTrigger.BEGIN); without state checking. I will check  how it behave.