Change agent argument db.file to data.dir

This is in preparation for aspectj cache and it will be easier to
specify a single directory instead of multiple file locations.

Also, set the default data.dir to the directory that informant.jar
is in, instead of the process 'current dir' (which is the annoying
C:\Windows\system32 when running tomcat as a service).
Escape control characters correctly in json
Skip json properties that have null values

When writing json strings, skip json properties that have null values
since it is more compact.
Remove unnecessary instanceof test and cast

The root span detail is always a RootSpanDetail (this changed at some
point, previously it could also be a plain SpanDetail).
Log getCause() when catching ExecutionException

Not a big deal, since the cause should get logged as well, but since
ExecutionException is nothing but a wrapper around another exception,
may as well skip the outer layer when logging.
Don't exclude META-INF/maven/* from informant jar

Can't think of any reason not to keep these files.
Use the versioned dtd for aop xml files

Use the versioned dtd instead of the alias that always points to the
latest version.
Add informant 'packages' to simplify install

Add underlying support for developers to be able to create informant
'packages' (e.g. informant-for-web, informant-for-my-app) to simplify
distribution and installation. These packages should be a single jar
file containing informant-core and a set of plugins.  The 'packaged'
plugins should be displayed separately in plugins.html, since they
cannot be uninstalled.

Create a maven plugin to make it super easy to create a package with a
given set of informant plugins.
Minor logging and exception message cleanup
Keep source code line length under control

Try to keep lines to 100 characters or less.
Suppress unneeded aspectj warning messages

These are more likely to cause confusion than to help catch legitimate
issues.
Allow jvm to start if ui port is unavailable

If the ui port is unavailable, Informant should still function and
gather data, there just won't be any way to view the data until the port
is cleared and the jvm is restarted.
Minor method rearrangement

Place shutdown() methods as logical last method (within methods grouped
by same visibility).
Clean up isolated class loader in plugin testkit

Discovered that boot class loader is the key to deciding which classes
to load from the parent class loader and which to load from the isolated
class loader.
Simplify the InformantContainer in plugin testkit

Reduce the three phases of the container (create/start/shutdown) to two
phases (create/shutdown). Use an adapter instead of inheritance to help
simplify the container. And some renaming, e.g. static create() method
following guava's naming convention.
If ui.port is 0 then bind to any available port

This is primarily useful for unit tests so that they don't collide with
instances of informant running on the default port 4000.
Display active durations as 'duration..'

Currently active span durations are displayed with only '--' and don't
indicate the amount of time the span has been running so far.

Also, attempt to normalize active trace timings to a single instant in
time without using synchronization to block updates to the trace while
it is being read.
Rename ticker snapshots from '..Time' to '..Tick'

Primarily rename startTime to startTick and endTime to endTick. These
names seem less ambiguous and emphasize that these are (nanosecond)
ticker snapshots as opposed to clock times.
Minor terminology fix

'Merged stack trace' should be 'merged stack tree'.
Minor ui change to metric data section

Based on feedback, try to make metric data section more self-
explanatory.