Make the monitor observer system type agnostic

We want to be able to send all the things like worker info as well as job
status through the same channel.
Re-wrote the monitor program to be rebust to network issues

It will stay connected and displaying data no matter what!
Monitoring software now gets server list sent it

This just sends out all the worker state once a second to any monitoring
program.  It's very basic, but we can now see what workers are connected
to our server very easily.
Add a very basic debug logging system

We just use a global variable and some utility functions to direct traffic
to it.  If we need something more we will have to go with one of the
external go logging projects.
Add cbdcc logging with the CBD_LOGFILE environment variable

When the environment variable is present DebugLogging is set to true and
the go logging module directs it's logging messages to the given file. This
is useful because we don't want to pollute what is supposed to be the
output of the build tool with our software's messages.
Make sure to always clean up test background processes

You can't have multiple traps for EXIT, and this is less error prone.
Drop workers who have connection errors

This makes sure we don't send clients to workers that don't exist. We
actually have a complete test for this using a channel based connection.
It still needs a little work to remove the need for a certain number of
GOMAXPROCS but it's better than an integration test.
Cleanup test script variables in a central place

This will make it harder to accidentally leave a variable behind that will
effect another test.
Update the network client & worker test to ensure remote worker usage

We have added an environment variable for test purposes (a hack I know),
but it lets us disable the use of local fallback in the build client. This
ensures that are remote worker test is actually using the remote worker.
Specify client and server ports directly, not full go style addresses

Instead of listening on say ":15000" we not just tell them to listen on
port "15000".  This makes the command arguments simpler, and we can control
where connections are accepted from in a separate way.
Functions for getting, sorting and matching a machines IP addresses

These will help with machines advertising what IP addresses they have and
allow the server to direct a client to correct of several worker's IP
addresses.
We now find and reporting workers by IP address instead of hostname

This is more reliable because we cannot always expect hostnames to resolve
properly on different machines.  This is also quite a bit more complex
because hosts can have several IP addresses so we report all available IP
addresses, and the server matches up the most "local" relative to each
client.

We have also included more debug logging to make it easier to debug
connection issues in the future.
Fix error reporting for remoteCompletion in the client

We printing out the general error variable, not the one from the actual
remote job report.