Identiy tests that operate on arrays
Test to reproduce #57

JSON objects have same k/v pairs in different order and inside an array.
JSONDiff uses it's own equals method to compare arrays and objects

Two `JSONObject`'s with same key-value pairs but in a different order are still equal. And two arrays containing these respective objects are equal as well.

For now we are using the string representations of these objects for equality comparison since they sort the keys alpha-numerically but it is potentially a performance issue.

Fixes #57
Implementing JSONDiff.equals for JSONObject and JSONArray

Performs deep comparisons for equality.

Fixes #57
Use java generics for JSONObject key iterator
Merge branch 'develop' into feature/executor
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.
Merge branch 'develop' into feature/executor

Conflicts:
	Simperium/src/instrumentTest/java/com/simperium/BucketTest.java
	Simperium/src/instrumentTest/java/com/simperium/PersistentStoreTest.java
	Simperium/src/main/java/com/simperium/android/AndroidClient.java
	Simperium/src/main/java/com/simperium/client/Channel.java
	Simperium/src/support/java/com/simperium/test/MockBucket.java
	Simperium/src/support/java/com/simperium/test/MockClient.java
	Simperium/src/support/java/com/simperium/test/MockExecutor.java