Make Puma launch with all threads pre-forked in production mode.

This makes it less likely that Puma will not be able to fork a thread in
time of need.
Run all docker slaves via sudo to avoid ulimit constraints.
Use 'FOR NO KEY UPDATE' when updating sysdata in the database roles.

This hints to postgresql that we don't intend to delete the row or
change the primary key.  This fixes some deadlocks on our more heavily
used NodeRole rows.
Ditch run's version of locked_transaction.

The one in api_helper does the job just fine.
Include a log for when we retry due to serialization failure.

This is for informational reasons.
Let jig.run_job steal work on a per-node basis.

This allows the annealer to more efficiently reuse SSH oppourtunistic
master channels, and makes individual nodes come up faster.
Make the fake /etc/sysconfig/network contain meaningful content.

Squid needs this to actually launch in Centos and Redhat.
Switch to Squid for our caching HTTP proxy needs.

Using Squid instead of Apache is faster and less resource intensive, and
gives us and our users oppourtunities to tune the cache for their
expected workload.
Make Docker nodes use IPv6 for their bringup.

Since they are not tied to IPv4 like Sledgehammer is for PXE, just let
them use native IPv6 from the start.
Remove magic from our automatic IPv6 range.

Instead of relying on hardcoded magic to determine what the IPv6 address
for a node is, track it in the database along with the IPv4 ranges.
Add utility views for faster handling of framework roles.

These views encapsulate all the knowledge we need to deal with our DHCP,
Docker, and DNS records.
Refactor high-contnetion framework roles to use the specialized views.

This undoes the per-node logic I used to have in the Rails framework,
and since the database is doing all the heavy lifting it is just about
as fast.