Implement mapreduce.reduce.shuffle.symlink-mapoutputs and
mapreduce.reduce.shuffle.symlink-merging options.

When running Hadoop over a networked file system, such as NFS or
Lustre, there is no need to send map output data from mappers to
reducers.  The data is already stored in a network location that is
available.  So instead create a symlink to the mapoutput data and have
reducers only read/load the appropriate data they require.  To enable
this enable the mapreduce.reduce.shuffle.symlink-mapoutputs option.

In addition, when doing symlinked mapoutputs, attempt to more
intelligently merge the data in the reducer phase by bring some
segments into memory instead of always spilling to disk.  To enable
this enable the mapreduce.reduce.shuffle.symlink-merging option.

Generally speaking this is a proof of concept patch with many hacks
and code done w/ some laziness.  Take it with a grain of salt.

See RESULTS.txt file for performance results and comments.

See TODO.txt file for code issues.