Implemented new scheduler thread classes

Background
-----
This pull request mainly implements two new scheduler threads as described in [the documentation](https://docs.google.com/a/adsk-oss.com/document/d/17xmcMexPLmASaGJ89hKXzDC4EFmdOa5Mtl2gTG6hQ04/edit). This is meant to be a continuation from [a previous pull request](https://github.com/DynamoDS/Dynamo/pull/2102).

1. ```DynamoSchedulerThread``` for standalone Dynamo
2. ```RevitSchedulerThread``` for Revit hosted Dynamo

Additional changes
-----
Less obvious is the way we added dependency on ```DynamoCore``` in ```RevitServices```, from the way things look that seems to be alright. I'd see what @ikeough has to say about it.

Hi @ke-yu, @Randy-Ma, @aparajit-pratap and @ikeough, please have a look at this, thanks! :)

![Image of the Octodex]
(https://octodex.github.com/images/droidtocat.png)
As described in the [Pending question section](https://docs.google.com/a/adsk-oss.com/document/d/17xmcMexPLmASaGJ89hKXzDC4EFmdOa5Mtl2gTG6hQ04/edit#heading=h.bxyh9fj6c2p9) of the document, I will add more details soon. But here's what we have decided:

1. Provide an API ```DynamoScheduler.CancelActiveTask``` to cancel the running task at any given time.
2. Provide a virtual method ```AsyncTask.CancelCore``` that allows derived classes to handle cancellation.
3. For long running ```UpdateGraphAsyncTask```, it will internally cancels the execution with the current behavior that you have implemented (i.e. setting ```ProtoCore.Core.CancellationPending``` to ```true```). We figured passing on the ```CancellationToken``` causes too much code changes and does not necessarily bring us much benefits (since the power of ```CancellationToken``` comes with the ability to register a callback to whoever cancels the task, and it might not be applicable in our scenario).

Please let me know if I have missed out anything.