[Proposal] Required dependency checks

Following #351, this patch goes even further and introduces new `BaseView#dependencies` object property to declare view dependencies; The idea is to turn code like:

```js
var MyView = Backbone.View.extend({
  initialize: function(options) {
    options = options || {};
    if (!options.q)
      throw new Error("missing q");
    if (!options.a)
      throw new Error("missing a");
    this.foo = options.q;
    this.bar = options.a;
  }
});

var view = new MyView({q: "universe", a: 42});
console.log(view.q, view.a) // "universe" 42
```

into:

```js
var MyView = app.views.BaseView.extend({
  dependencies: {q: String, a: Number}
});

var view = new MyView({q: "universe", a: 42});
console.log(view.q, view.a) // "universe" 42
```

Of course, regular `#initialize()` method is still usable, and can access the injected dependencies as object properties:

```js
var MyView = app.views.BaseView.extend({
  dependencies: {q: String, a: Number}

  initialize: function() {
    console.log(this.q, this.a); // "universe" 42
  }
});
```

Note that the patch adds type validation as well in addition to property checks. This is useful when reviewing view-related code, and secure it a bit more against mistakes. If a requirement fails, you get an error:

```js
var view = new MyView({q: "universe", a: "blah"});
DependencyError: invalid dependency: a; expected Number
```

It's also possible to check for alternative types:

```js
app.views.CallControlsView = app.views.BaseView.extend({
  dependencies: {
    call:  app.models.Call,
    media: WebRTC,
    el:    [String, jQuery] // either "#foo" or $("#foo") will work
  }
});
```

As a side note, please note this prevents us writing many tests for checking that passed options are set, and therefore lighten the test codebase quite a bit — which is quite a significant improvement f you ask me.

Landing this is to be discussed, and the impl. to be challenged. We could also imagine expanding the use of this concept to other objects like models or apps, even outside of Backbone's scope.

**Edit:** Concept pushed further, now models & collections can declare their expected dependencies as well.