Completely rework zero-downtime deploy internals (TORQUE-1124)

Zero-downtime deploys are triggered the same way as before (JMX,
restart markers) but the internals have been completely reworked so
that shared and bounded runtimes share the same code encapsulated in a
new RestartableRubyRuntimePool class.

During a zero-downtime deployment, the new runtimes are now completely
booted before sending any web requests, jobs, etc to them to eliminate
any timeout issues from runtimes that take a while to boot. This does
mean you need enough free JVM heap space to hold a second copy of the
running application in memory during the transition.
Oops - ensure we never call Executors.newFixedThreadPool with 0 threads
pooling_spec integ needs to know the underlying pool name