Introducing bitwise ops

While this is mostly done, there are a few areas that have undefined behavior that I would like to review:
* NaNs: At the moment they are prohibited because I really want to allow strings. Should I only disallow NaN strings, all NaNs, or let them be used?
* Negative shift amounts: I think this type of undefined behavior is fine to allow.
* Units: Right now I use the lowest best prefix as the base, but this seems somewhat arbitrary, and I think it would be best to simply throw an error.

The BigNumber code is commented out as decimal.js doesn't support bitwise ops (yet, I've written the code, I just have to get around to writing extensive tests). Also, sorry for this massive pull request; hopefully the similar code flow makes it easier to digest.

All comments welcome!
#86