Introduce getRootTopics on topicService.

Also adding some tests that are also covered by integration tests.
we are in the process of removing the duplicative integration tests.
New test for unlinkRoot
Add missing tests, move tests into correct contexts.

We found a couple of duplicated contexts, so we combined them.
Add missing test
Add missing test context
Combine duplicate contexts
Standardize on throwing Error objects, and fix failing tests.

Had a very subtle bug with mocha-as-promised loading that was very
difficult to diagnose. It seems that if any mocha tests run before
mocha-as-promised is monkey-patched, then mocha-as-promised tests
will always pass (false positives). The previous few checkins actually
had failing tests that went undetected because of this problem.
Things are a little brittle right now, because if ANY test file does
not include test-utils, this behavior will be reintroduced. We should
consider a mechanism that would guarantee mocha-as-promised is loaded
before any mocha tests run.

We had a test that was failing in a vague manner because the objects
we pass to mocha's done() method are not actually Error objects.
Introduced 'error' module which contains a method to create a
rejected promise with an actual Error object, along with the 'name'
and 'message' properties we have been using. The consequence is that
now we will never "throw" strings that represent errors from our service;
we will always throw an Error object, which results in a better error
message when passed to mocha's done() method.

One test was failing because the stub graph did not implement topics.get
in the same way that the real graph does. The real graph populates
related topics, but the stub graph did not. The stub graph is growing
in complexity as it tries to mimick the functionality of the real graph.