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.