Removing SyncService interface

- Removes interface
- Removes BasicSyncService implementation

refs #51
Replace uses of SyncService with Executor

Refs #51
Replace use of BasicSyncService

Refs #51
Update mock uses of SyncService

refs #51
Use MockExecutor in unit tests

Refs #51
Injecting ExecutorService into Channel

Channel no longer maintains it's own thread. Instead it's given an executor service to perform work on.
sendChange now throws exception when it can't send

The return value was ambiguous.
No longer need to explicitly stop processor
Cleaning up code
Switching change procesor to perform one change per execution

For each remote change or local change to process it will only do one unit of work.

1. Check remote changes, if there is one, process it and schedule another run
2. If no remote chagnes, check local changes to send out, if there is one, send it out
3. If there are no remote changes and no local changes it can stop doing work

When a new remote change or local change is queued, the processor gets added to the executor and will start working again.

Retrying changes are handled outside of this work and will fire at the scheduled timer interval.

Fixes #53
MockExecutor provides Immediate and Playable executor services

Immediate runs each runnable as it receives it. This effectively makes the Executor single threaded within the context it is being used. Useful for tests that are not concerned with concurrency.

Playable queues up each Runnable and then executes them in turn when Playable.play is called. Any Runnable's added to the executor during play will also be executed. Useful for testing concurrency since the test can control when the Runnables are executed.
Update uses of MockExecutor

MockExecutor.Playable is now used in ChannelTest and all thread manipulating methods have been removed.