Changes to partitioning.

Previously, hash partitioner using default Object.hashCode was used.  That
hashCode is reference-specific, so it wasn't even putting equal keys
on the same reduce parition.  Now, the Edge object has a hashCode method
that applies an array hash to dst.  This makes it highly likely that
map outputs with the same key come from the same map task, shifting almost
all the reduce work to the combiner.

I wrote a custom partitioner, but it is not clear that it is working (or
even being called).
Creates a unique rundir; improvements to parsing and logging.

Each execution of run.py creates a unique run directory in ./runs so
concurrent runs don't collide.

Added {map, combine, reduce} {input, output} records to output, added
fixed-width column formatting.

Copies the log files and std{out,err} of mapreduce invocations into
log directories in the run directory.
Script to set up hadoop configuration on a supercomputer allocation.

This probably should have been added a while, but its been more heavily
modified recently.  Original author is Jason Hedden (UChicago RCC).

The properites in the config files are custom for this job (other
than dfs replication being set to 1).  These are really fat nodes,
so all the buffers and heaps have been set much larger.