Runtime type assertions

Added a new feature to insert runtime type assertions for type annotations.  The type assertions are added as <code>assert.type(value, Type);</code>.  In order to simplify the insertion of the assertion into variable declarations and return statements it is expected that <code>assert.type</code> return the value passed to it.  

Once we support more types of type annotations we will need to come up with a way of representing the annotations in a way that will allow us to call the <code>assert.type</code> function with the additional information represented by the type annotation. 

The type assertions are controlled by two new flags:
* <code>--type-assertions</code> (boolean): Turns on assertion generation
* <code>--type-assertions-module</code> (string): Specifies an import path to a type assertion library.  If this module path is specified then an import statement is added for the assertion library.  Otherwise it is assumed that an assertion library which implements the type check is exposed globally.

Example:
```javascript
function isStringEmpty(value:String):Boolean {
  return value ? value.length > 0 : false;
}
```
Would generate:
```javascript
function isStringEmpty(value) {
  assert.type(value, String);
  return assert.type(value ? value.length > 0: false, Boolean);
}
```