Add new interop methods to NSThread for invoking delegates.

This change adds convenient methods to invoke an Action delegate with optional parameter either synchronously or asynchronously on a new background thread, the main thread, or a specific thread.

Examples:
NSThread.StartNewThread (() => DoSomething());
NSThread.MainThread.Invoke (() => DoSomething());
myThread.Invoke (() => DoSomething());

This commit also removes the redundant and verbose DetachNewThreadSelectorToTargetWithObject overload.

Finally, this commit adds and installs NSThreadSynchronizationContext.
Merge branch 'feature/nsthread-interop-delegates' of https://github.com/spicypixel/monobjc into spicypixel-feature/nsthread-interop-delegates
Add support for null argument.
Refactor some code.
Add some tests.