The WeakMap shim actually stored values (in this case the observable storage) on the keys (view models) directly, using a hidden randomly-generated property, and overwrote the global Object.getOwnPropertyNames function to hide that property. For our purposes, the observable storage is not really that secret, so it simplifies everything to just create a non-enumerable property named __knockoutObservables on the view model. Less is more.
Make the files match their upstream form as closely as possible. We should not be aggressively rewriting and reformatting our third-party libraries to match our own coding standards, because it makes it much harder to diff against the original when trying to upgrade.
Also adjust the licensing comments to:
* be correctly preserved in minified output by both r.js (UglifyJS) and Dojo (Closure Compiler)
* clearly indicate the names and URLs of the components each license applies to.
The selection of the implementation should only happen once. Add smarts to the non-native setTimeout fallback to make it better target 60fps by accounting for the time taken by the callback. Add es5-shim library when running specs to allow them to actually be runnable on old IE. Update LICENSE.md to reflect current state of third party libraries by removing old ACE and JS Beautifier entries, and add CodeMirror, JSHint, and now es5-shim.
Replace Jobs.downloadImage and getImageFromUrl with promise-based loadImage.
Change jsonp to work in a promise-based way. Fix some other random documentation
problems I noticed along the way.