Explicitly shut down TCP threadpools.
Shut down UDP worker pool at server stop.
Refactor riemann.transport to make pipeline composition simpler.

PipelinesFactories are now fixed at compile time, and can share the same
decoders and handlers between many connections, which should improve
threadpool efficiency and cut down on object churn. I've untangled the
various layers of pipeline factory construction and moved them all into
a new macro (channel-pipeline-factory), called from the UDP, TCP, and
Graphite servers.
Move execution handlers to above protobuf parser.

This means the execution handler's task size estimator can use the netty
channel buffers to get a memory-use count. Since we were spending ~40%
of our time waiting for DefaultObjectEstimator... it's a significant
speedup. :)

Also trimmed a now-unneeded object size estimator.
TCP, UDP, and graphite servers reuse the same executor pool.
repl/start-server! now takes a hash-map instead of a vector.

This is what the rest of the code expects. Previously, this would cause a crash:

(repl-server :host "0.0.0.0")
Merge pull request #144 from PeterScott/fix/repl

repl/start-server! should take a hash-map instead of a vector