Simperium does not start or stop the socket manager

This happens automatically when a channel tries to connect
Removing idle state tracking, not needed now that we block
Whitespace formatting
Allow changing of user's AuthenticationListener

Mostly for testing purposes
Channel authentication status monitoring

Testing current implementation of Channel auth message handling
Refactor and decoupling for subcomponents

In preparation of unit testing `com.simperium.Simperium` it became necessary to
be able to inject fake components for the networking and persistence stacks.

There are now four well defined components for a Simperium client which is
presented in the `com.simperium.client.ClientFactory` class.

Still a work in progress but the more defined these components and the more
decoupled the easier it will be to start supporting alternate platforms.
User Authorization refactoring

- naming consistency: the Simperium api uses authorize so the library is using "authorize" instead of "authenticate"
- User.Status flow refactor
  - default status User.Status.UNKNOWN
  - if we have no stored token, set to User.Status.NOT_AUTHORIZED
  - if we do have a token wait for channel resposne to set authorization status
- token is not cleared unless Simperium.deauthorizeUser is explicitly called
  - presence of token (`User.hasAccessToken`) combined with `User.getStatus` NOT_AUTHORIZED means the user needs to sign in again
  - no token combined with `User.getStatus` of NOT_AUTHORIZED means no user is currently signed in
Implementing new failed auth message in socket API

- ignore `auth:expired`
- detect `auth:{JSON}`
  - if it's a 401 fail the auth
  - if it's not a 401, currently don't do anything
- if not JSON, then it's an email and it was succesfull

Fixes #19
Refactoring ObjectCache into ObjectCacheProvider and moving to ClientFactory

Allows client implementations to provide the object caching mechanisms.
Add support for testing.
Whitespace fixes
Adding property accessor on BucketObject
Whitespace formatting
Refactoring SyncService to be provided by client implementations

- allows tests to be run in a single threaded implementation
- potentially other platforms would prefer different threading options
MockSyncService now properly implements interface
Updating MockClient to use updated ClientFactory
Adding basic high level bucket test
Turn off autoIndex of default buckets
Test using alternate BucketStore for specific buckets
Continuing refactor of ClientFactory

- Moving each component interface into their own files
- Renaming Bucket.ChannelProvider interface to Bucket.Channel
Setting up dependencies and simperium artifact

Now properly supporting gradle project dependencies