Supporting classes for the new threading model

Background
-----
This pull request implements ```DynamoScheduler``` and ```AsyncTask``` classes that are required for the new threading model. The pull request does not represent a complete and working version of these classes, it is created in the interest of having multiple, smaller chunks of the larger redesign work.

The two new classes are not referenced anywhere in the existing code base.

Unit tests
-----
Few test cases are written to test ```TimeStampGenerator``` and ```AsyncTask``` classes. More test cases will be made possible with subsequent pull requests with ```DynamoScheduler``` and ```ISchedulerThread``` implemented more fully.

External references
-----

Documentation for the series of threading model redesign works [can be found here](https://docs.google.com/a/adsk-oss.com/document/d/17xmcMexPLmASaGJ89hKXzDC4EFmdOa5Mtl2gTG6hQ04/edit).


Hi @lukechurch and @ikeough, it seems like only two of you have seen the original document, perhaps these codes do not look too alien to you. And since @ke-yu and @Randy-Ma dropped by for a look, I might as well make use of their expertise and sharp eyes! Please have a look, thanks! :)

![Image of the Ironcat]
(https://octodex.github.com/images/ironcat.jpg)
This is the codes after I updated it, I may be doing it wrong, but I'm afraid this may cause problem. Consider the codes to be like this:

```cs
long timeStampValue = 1024;

get
{
    Interlocked.Increment(ref timeStampValue);
    return timeStampValue;
}
```

When two threads ```T0``` and ```T1``` are trying to get this property with the following execution sequence. That looks like it will return the same number for both callers:

```
T0: Interlocked.Increment(ref timeStampValue); // timeStampValue = 1025
T1: Interlocked.Increment(ref timeStampValue); // timeStampValue = 1026
T1: return timeStampValue; // timeStampValue = 1026
T0: return timeStampValue; // timeStampValue = 1026
```

Without using a temporary local variable (as suggested by Randy), I can't be certain if the following will cause the above race condition or not (i.e. returning the same value):

```cs
get
{
    lock(timeStampMutex)
    {
        return timeStampValue++;
    }
}
```

Any idea?