Adds an ability to pass functions to `assert` and `deprecate`

It depends on the [ember-dev PR](https://github.com/emberjs/ember-dev/pull/148).

The use case surfaced when I was [re-writing](https://github.com/emberjs/ember.js/pull/9537) `loc` helper.

It would be nice to replace this code:

```javascript
export function locHelper(params, options, env) {
  function ifParamsContainBindings() {
    for (var i = 0, l = params.length; i < l; i++) {
      if (options.types[i] === 'id') {
        return false;
      }
    }
    return true;
  }

  Ember.assert('You cannot pass bindings to `loc` helper', ifParamsContainBindings());

  options.morph.update(loc.apply(this, params));
}
```

with this:

```javascript
export function locHelper(params, options, env) {
  Ember.assert('You cannot pass bindings to `loc` helper', function ifParamsContainBindings() {
    for (var i = 0, l = params.length; i < l; i++) {
      if (options.types[i] === 'id') {
        return false;
      }
    }
    return true;
  });

  options.morph.update(loc.apply(this, params));
}
```

`Ember.assert` is going to be stripped all together and file size of Ember production build won't be changed at all.

Let me know if you want to hide this feature behind a feature flag.