add normalization caching.

Note this now depends on ES5shim for browsers non es5 browsers