Major improvements to instrumentation code

Modified the Byfl LLVM pass to put all instrumentation code at the
*end* of the basic block rather than interleaved with program code.
Doing so offers two main benefits.  First, the LLVM pass is simpler
and more maintainable as it no longer needs to distinguish
instrumentation code from program code.  Second, instrumented programs
run substantially faster as (1) Byfl no longer needs to save and
restore state around all program function calls, (2) the grouping of
instrumentation code enables additional LLVM code optimizations, and
(3) when thread safety is enabled, the mega-lock needs to be taken
only once per basic block, not multiple times.

This new Byfl revision also corrects and simplifies the handling of
multithreaded progams.  Previously, some data were protected by
keeping them in thread-local store while other data were protected by
the Byfl mega-lock.  That lead to complexity (keeping track of how
each datum should be protected), crashes (not all pointer data were
getting initialized by all threads), and lost data (not all threads
were aggregating their data back to the global totals).  In this
revision, there are no thread-local data; all data are shared and
protected by a single lock.