[2.0] Fix loopback in PhantomJS, fix karma tests

- Move configuration of Karma unit-tests from `Gruntfile.js` to a
  standalone file (`test/karma.conf.js`).

- Add a new Grunt task `karma:unit-ci` to run Karma unit-tests in
  PhantomJS and produce karma-xunit.xml file that can be consumed
  by the CI server.

- Add `grunt karma:unit-ci` to the `test` script in `package.json`.

- Add `es5-shim` module to karma unit-tests in order to provide
  ES5-methods required by LoopBack.

- Fix `mixin(source)` in lib/loopback.js to work in PhantomJS.
  `Object.getOwnPropertyDescriptor()` provided by `es5-shim` does not
  work in the same way as in Node.

Requires strongloop/loopback-datasource-juggler#152

/to @ritch Please review.
/cc @rmg When this patch is landed, loopback is ready to run karma unit-tests on our Jenkins. `npm test` is already running karma via Grunt, is there anything else needed to enable karma tests on Jenkins?
AFAIK it is not breaking. This check is preventing the following situation:

```
$ node
> Object.defineProperty({}, 'foo', undefined)
TypeError: Property description must be an object: undefined
    at Function.defineProperty (native)
```

`desc` is not defined when the `key` is not an own property of the `source`. MDN on [getOwnPropertyDescriptor](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor):

> **Return value**
> A property descriptor of the given property if it exists on the object, undefined otherwise.

What happens in PhantomJS:
 - `for (var key in source)` enumerates over `bind` function
 - the `bind` function is not an own property, `getOwnPropertyDescriptor` returns undefined
 - `Object.defineProperty` throws when the descriptor is not defined