Replace bigi with bignum(for node) + bignum-browserify (for browser)

This takes bitcoinjs/bitcoinjs-lib#117 one step further and potentially closes bitcoinjs/bitcoinjs-lib#24.
- Use of bignum will improve performance on node.js
- bignum-browserify uses jsbn (as a dependency which is modularized from the original jsbn) under the hood. It wraps jsbn with the bigint interface, which supports buffers out of the box.
- The bitcoinjs-lib specific BigInteger helper methods are patched in bigint.js and tested.

One notable inconsistency is that jsbn rounds towards zero for integer divisions, e.g. 10 / -3 = -3, whereas bigint rounds towards negative infinity, e.g. 10 / -3 = -4. I'm not sure if it affects us in any way. 

~~Browserify couldn't seem to pickup the patched methods on BigInteger.prototype. I'm still looking into that.~~

__update__: bignum & bignum-browserify `isbitset` returns different values for negative numbers.
tests are passing for browsers but failing for node. Not ready for merge