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 some tests](https://github.com/bitcoinjs/bitcoinjs-lib/commit/0524ced98464c4643366f77042da1e8fe2a86af1).