Fix js.Dictionary wrt the collection API contracts.

* Fix a JavaScript wart with dict.contains("hasOwnProperty")
* -= should not throw if the key does not exist
* apply() should throw if the key does not exist
* get() should return Some(undefined) if the key exists but the
  value is `undefined`.
* It should not extend js.Object since calling methods of
  js.Object is unsafe (given that they could be keys).

This fixes #1414 and #1411.