MPI Support - Add new event types for basic MPI support

To support MPI, three new events were added: rank, transfer, and wait.  MPI
runs instances in separate ranks, which needs to be recorded and accounted
for in post processing.  Transfers are data copies between ranks.  Waits
are required as some transfers are non-blocking, so the wait represents
where the transfer actually completes.
MPI Support - Add support for MPI instrumentation into runtime

This insturmentation provides wrappers for three new MPI events.  It also
introduces wrapper routines around MPI calls, so that the runtime can
invoke MPI routines, but not require an MPI library to be linked into the
program.
MPI Support - Support for MPI in middle layer

This MPI support requires middle layer to be able to process mulitple input
traces simultaneously, which needed extensive rewriting to move many
data structures into classes.  The support also can process the new MPI
event types.
MPI Support - Detect MPI in use based on -lmpi...

If MPI is present, then Contech should link in ct_mpi else ct_nompi.  These
files provide wrappers around MPI routines, such that Contech can use MPI
iff the instrumented program does.
MPI Support - Add rank field to memory op
MPI Support - Add new sync type for MPI transfers
MPI Support - Add detection of MPI routines into Contech LLVM Pass

This adds a number of new functions to detect, such that common MPI
functionality can be instrumented and the appropriate runtime routines invoked.

This change also introduces a further path to detecting functions that
are not directly invoked, as Fortran may use a cast statement on the function.