Implemented three new async task classes

Background
-----
This pull request continues the scheduler work established in [a previous pull request](https://github.com/DynamoDS/Dynamo/pull/2276) by introducing the following new ```AsyncTask``` drived classes:

```cs
CompileCustomNodeAsyncTask // For compiling custom node instances before run.
SetTraceDataAsyncTask // For setting trace data before starting an execution.
DelegateBasedAsyncTask // For scheduling a delegate/Action object for async invocation.
```

These classes are used to retain the original workflow in ```DynamoRunner.RunExpression``` method (and its nested function calls). As before, the new code can be enabled by using a preprocessor ```ENABLE_DYNAMO_SCHEDULER``` for both ```DynamoCore``` and ```DynamoRevit``` projects.

Note to Reviewers
-----
Hi guys (@lukechurch, @aparajit-pratap), this PR is a continuation of the scheduler work from [previous pull requests](https://github.com/DynamoDS/Dynamo/pull/2276). It is a subset of what have gone into the ```Concurrent``` [branch](https://github.com/Benglin/Dynamo/compare/Concurrent), just to make reviewers' life easier.

Testing
-----
The previously noted custom node failures were caused by not compiling the custom node instances in the ```Home Workspace```, and are now addressed with the new ```CompileCustomNodeAsyncTask```. With ```ENABLE_DYNAMO_SCHEDULER``` enabled, the custom node tests started passing with the introduction/usage of this async task.

![Image of the Octodex]
(https://octodex.github.com/images/hubot.jpg)

This new ```DelegateBasedAsyncTask``` is meant to replace ```IdlePromise``` in Revit (which are usually simple delegates). Since it is not appropriate to document about ```Revit``` in ```DynamoCore```, I'm leaving that point out of the comment below.