Remove redundant route resolution functions.

An earlier design for this library had these functions as methods on
the server object, but they've since moved to be methods on the $route
service and its route instances. The SDR API and HTML snapshot helpers
got left behind on the old implementations, causing some unnecessary
slight differences in behavior.
Defer compiling the template until HTML generation.

Users of runInContext or wrapMiddlewareWithAngular may be performing
operations that don't require a template to be compiled at all, so we
skip that step by default but opt into it for the HTML generator, which
*does* need it. Other callers that need a root element can similarly
call injector.bootstrap with an element to use as $rootElement for the
injector.

The other attractive side-effect of this change is that we defer template
compilation until we've associated the injector with a request, which
means that directives are guaranteed to be able to use $location during
compilation, if necessary.
Wait for $viewContentLoaded before returning an HTML snapshot.

This is important in case the controller needs to do some additional
async work before the view is ready.
Provide template when rendering HTML snapshots or SDR API responses.

The API for wrapMiddlewareWithAngular changed earlier and these callers
were not updated, causing the snapshot rendering to not actually work
any longer.
Log a full stack trace when Angular traps an exception.
Initial support for route templates by URL.

For this initial implementation we actually fetch the template from the
server via HTTP. This is inefficient but ensures that the URL will get
resolved the same way as it would on the client.
Remove unused flattenPromises function.

We're now exclusively using the implementation provided inside ngoverrides.
HTML generator no longer needs $compile.

injector.bootstrap() is now handling compilation on its behalf.