Will the real Web Crypto please stand up?

Adds
* crypto.js
  - Defines our low level crypto operations (hmac, encrypt/decrypt) in terms of the Web Crypto API spec.
* webcrypto.js
  - collects all CryptoJS-based implementaions into a polyfill to tide us over until the real Web Crypto lands.

Also refactors everything that depends on those operations to work with js promises and handle the results asynchronously.

Finally, adds a few low level crypto unit tests with NIST test vectors.