Add Subscription object.

Subscription object stores details about the MessageBus subscription.
MessageBus now returns this object when subscribing and also requires it
when trying to unsubscribe.
Fix BugsnagUserManager typo.
Add locking to MessageBus.

MessageBus methods are now thread-safe to call.
Add message dispatch to main thread.

MessageBus can now send messages to main thread safely. Default for
listeners is to enforce main thread dispatch.
Fix incorrect lock timeout.
Use ReaderWriterLockSlim.

Converted MessageBus to use ReaderWriterLockSlim instead of
ReaderWriterLock.
Make MemoryModelCache thread-safe.
Make manager caches access thread-safe.
Make SQLiteModelStore thread-safe.
Make AttributeLookupCache thread safe.
Make models thread safe.
Make related models collection thread-safe.
Make foreign key converter thread-safe.
Make model manager thread-safe.
Make SQLiteModelStore thread-safe.
Make rest client process responses on the thread-pool.
Move sync to thread-pool.
Fix message bus main thread scheduling.

The MessageBus main thread scheduling did not mark the scheduled worker
to be finished, thus main thread items were delivered only once.
Drop ReaderWriterLockSlim from MessageBus.

ReaderWriterLockSlim managed to get corrupted internal state and cause
deadlocks.

Apparently mono's implementation of it is very buggy:
https://bugzilla.xamarin.com/show_bug.cgi?id=13884
Drop ReaderWriterLockSlim from MemoryModelCache.

ReaderWriterLockSlim managed to get corrupted internal state and cause
deadlocks in MessageBus.

Apparently mono's implementation of it is very buggy:
https://bugzilla.xamarin.com/show_bug.cgi?id=13884