ChannelReadWriter now uses a background updated to support go 1.3

The new design uses a bytes.Buffer to make sure that write calls never
block.  Read calls will block for up to 250ms.  Behind the scenes a
goroutine shuffles data between the input and output channels 1 bytes at a
time.
Added an autodiscovery logic

The server listens for UDP broadcasts from the client, and responds with
a direct UDP packet containing the port the client can connect on. This is
intended be used to ease the configuration pain.  This work is not yet
integrated into the main program, and doesn't support any notion of
sessions.
Display speed of each host in the monitor output

This features is still under development and we need to be able track what
speeds machines are being assigned and how much the fluctuate.
Make worker port range not conflict with the server, and validate jobs

This makes it simple to run both the worker and server on the same machine.
The job validation makes sure that the the input the worker is getting is
valid before it's used further down the line, and causes a crash.
Auto discovery functionality added to worker and server

The server runs the new AutodicoveryServer which listens for UDP broacasts
and responds with the port to connect on.  The uses the autoDiscoverySearch
function when it's not given a direct address to the server.
Make default ports explicit, and use different ones for worker and server

The removes the notion of the messaging system having a default port, and
it makes it very explicit what port is being used to connect to whom. This
also makes sure the direct worker test actually executes a build on that
worker.
Document our environment variables

Sometimes even I forget these, so they should all be written down.
Add auto-discovery functionality to the worker processes

This make it super simple to setup workers as long as the network
cooperates and allows the UDP broadcast messages to go through.
Have auto-discovery automatically pick a listening port

We don't want to have multiple clients on the same OS interfere with each
other.  This does have the issue of not have a specific port range that
these packets will go over.  That is a TODO.
Fix job completion updates, improve error reporting, fix broken remote builds

The updates to default ports broken remote building, but it still worked
locally.  That is now fixed, along with job completion updates so we can
get proper speed estimates.  The tests have also been updated so that this
kind of error will be caught in the future.
Update the build and test script to explicitly set their working directories

This make it easier to script things, or just run from different
directories.
Test for worker to server auto discovery behavior

This makes sure the worker can find the server running on a non-default
port using auto discovery.  The client still needs the address hard coded,
but at least we have a full systems test of auto discovery now.