build: Implement Karma module for cross-browser unit testing

== Token ==
The fallback tokens are provided plainly. This is somewhat controversial
but I don't care. Travis has a thing called 'secure environmental variable'
(PGP encrypted) which by design only expand on merged commits (otherwise
a pull request could just echo $MY_TOKEN). The token only allow VM creation,
they don't compromise the account in any way. Besides, anyone can create
their own free account. By default we only run PhantomJS, but users can
choose to use own token. Though we encourage they create an account and
add their own environment variables.

== Pipeline ==
To reduce load and optimise for speed, only run cross-browser tests right
before merge in the gate pipeline. That way it doesn't slow down new patch
sets, commit message edits, rebases, and local npm-test. But does still block
merges and one can always run it locally with 'grunt ci'.

== Clean up ==
* Karma auto-generates <script src> for QUnit (from npm), the dist source,
  and test files. lib/qunitjs and tests/index.html are no longer used and
  have been removed.
* Karma uses generic launchers and aggregators that work for local browsers,
  cloud services, and PhantomJS alike. The grunt-contrib-qunit is no longer
  needed.
* Kama supports preprocessors and reporters to implement code coverage. Use the
  karma-coverage module (uses Instanbul, just like grunt-qunit-istanbul) to do
  this simultanously.
* testrunner.js used this/global mapping eventhough it was only ever run in
  a web browser. Get rid of this.

Change-Id: I03ed32c88b3f5e5cc9432a8902c71d1c14d0e2e4