Inherit from base stypes

Here's a first pass at making it possible to inherit from `Map`, `List`, `Set`, `OrderedMap`, etc.

Mostly putting this here for discussion, as there are probably a few ways to attack this one, but this seems to be working quite well in my preliminary use. It also has the benefit of eliminating `Object.create(MapPrototype)` in favor of `new Ctor`, which gives better inspection in the chrome console (and [potentially perf?](http://jsperf.com/obj-create-vs-new/4))

The inherited types must initially be constructed with `new`, and when inheriting via class style, it's necessary to return from the constructor:

```js
class User extends Immutable.Map {
  
  constructor(value) {
    return super(value)
  }
 
  fullName() {
    return this.get('firstName') + ' ' + this.get('lastName');
  }

}
```

If you think this looks good, I could beef up the tests a bit.