Introduce MetricMap as a way of exporting compiler metrics

Any method that has a TreeLogger can export a metric by calling
setAmount(). These metrics are exported by Super Dev Mode inside
each JobEvent.

Started with one metric for DeclaredTypesInModule as proof of
concept.

Also, fixed error-handling bugs in Super Dev Mode:
 - JobEvent VALID_TAG regular expression was incorrect.
 - If a Job failed with a RuntimeException that happened outside the
compiler, the stack trace was not being logged and the job would
never complete.

Clean up:
 - JobEvent was exposing the rebased ImmutableList class
 - JobRunner had an unused dependency on OutboxTable

Change-Id: Icb6f7e457c6d9b3b7de341a21b18b2ea0d505177
Review-Link: https://gwt-review.googlesource.com/#/c/9862/
Introduce PersistentUnitCache.BackgroundService

Moved all async operations to it.

Separated out the operations that update the memory cache
from those that update the disk cache.

Refactored and commented the code that loads units from the
disk cache.

Improved tracing.

Change-Id: I1f91ff9261e6a988e0bc6efba9fe444773dc159d
Review-Link: https://gwt-review.googlesource.com/#/c/10440/
Revert "Introduce PersistentUnitCache.BackgroundService"

This reverts commit bf556abdfb0cef9d2e49e20d27bab0bd221ebfb7.

Adding synchronization introduced deadlock

Change-Id: Ie0d030dcb2ed683962d2ca44bc308d2b1bd8da04