Reuse running daemon in AbstractDaemonTest

Maintain a single common daemon per test runner, and reuse it without
additional modification wherever possible. Associate each server with
an immutable Description class, and use a new, custom daemon when the
Description corresponding to the test class does not match the
Description corresponding to the method.

Some unscientific benchmarks, running tests after a full build.

On my workstation (HP Z420, 12 cores, 32G RAM, SSD):
  buck test --no-results-cache
    before: 4:37.88
    after:  3:22.36
  ChangeIT in Eclipse
    before: 26.153s
    after:  12.512s

On my laptop (11" MBA, 4 cores, 8G RAM, SSD):
  buck test --no-results-cache
    before: 15:34.28
    after:  11:34.93
  ChangeIT in Eclipse
    before: 30.903s
    after:  19.11s

We still pay a significant startup cost (~6-12s for the server), and
contention during buck test with default -j is an issue (3-5x increase
in time per test). But a 50%/25% reduction in single/aggregate test
time is nothing to sneeze at.

There is still plenty of low-hanging fruit that can take better
advantage of the per-test-class savings, like consolidating more
groups of integration tests together and removing HTTP dependencies.

Change-Id: I23b8d0e9839120a07a3fe1230f19184dc910682c
3 files changed