Typeforce

Removes the internal type checking code, and uses the [Typeforce](https://github.com/dcousens/typeforce/) module.   
Typeforce is just the module that previously existed with a few changes:

* It doesn't call `getName()` on the type, it enforces that if you want to enforce a custom type (such as `BigInteger`, then you use `"BigInteger"`).  This is what is occurring internally, and IMHO is therefore clearer as an API. 

* It supports object type templates (eg `{ a: 'Number' }` and or `['Number']`),  which has already found a bug in `scripts`.