A non-negligible amount of time can be spent checking for termination criteria.  Currently if we are in verbose mode we insist on checking every column to return an accurate worst norm; but we should never sacrifice performance for the sake of unneeded verbosity.  Allow early exit from the loop even in verbose code.
AT SLAC, we only use a single machine at a time; so that version of BOOST has been compiled with BOOST_MPI_HOMOGENEOUS defined, and we use a matching macro here.  This should reduce the amount of processing needed to copy vectors between processes.
Record a status code into the new fDenoisingInternalCode variable.  For now we record the status of denoising; this will let us track down the dominant reasons we fail to denoise events which standard scintillation could handle.
Providing a maximum walltime in the bullet queue may improve wait times.
SLAC mpi queue seems to lack sufficient cores; return to the model of multi-threaded finisher processes.
Improve the watches in the finisher process.
Remove all uses of shared-memory semaphores in favor of timed sleeping.  There may have been data race issues associated with the interactions as I defined them; and with only one thread waiting, there's not much overhead associated with occasionally waking from sleep.
Fix a possible bug in our use of MPI -- unless specifically enabled (with MPI_Init_thread, which is only accessible from boost 1.55), you cannot interact with MPI from more than one thread.
Fix generation of wrap scripts.

I'm honestly not completely sure how this worked before.  Perhaps
only on my local installation?
Add a knob to scale the APD gain by some constant factor; this will let me play with that value and see how close 1 is to optimal.
Update hopper submission script to match current practice on edison: get data from exolnx-v02, and launch two processors per NUMA node.
-mkl flag was linking MKL libraries dynamically.  Add flag to force intel to link them in statically.
Correct some old bugs in charge denoising.
Prevent fPendingSends from growing out of control by stalling the computational process if we detect its size is unreasonably large.
The -mkl flag now works on edison (and I have switched to using the intel compiler).  So, edison and hopper can use the same set of MKL flags.  Note that edison is a little more finicky about the placement of the -mkl flag.
MPI needs all interactions to happen from the main thread, to qualify as "funneled"; anything else requires a special setup which can affect performance and is only supported by boost 1.55+.  So, reorganize the listener accordingly.