Track loads and stores by data structure

This revision represents a major feature addition to Byfl.  When given
the -bf-data-structs compile-time option, Byfl will report the number
of bytes loaded and stored (among other information) to each data
structure individually.  A data structure is defined as either a
statically allocated block of memory (which has a name in the
executable's symbol table) or collection of data dynamically allocated
from the same program call point (i.e., instruction address).

Byfl tracks accesses to malloc, calloc, realloc, valloc,
aligned_alloc, memalign, pvalloc, posix_memalign, mmap, operator new,
operator new[], free, munmap, operator delete, and operator delete[]
when determining what memory addresses should be associated with which
data structure.

A side effect of the code that was added to Byfl to support
per-data-structure counters is that Byfl now distinguishes function
calls that can throw exceptions from function calls that cannot.
Technically, this means that Byfl now considers LLVM Invoke
instructions in addition to Call instructions.  (The whole-program
summary output merges these, but the binary output separates them.)

Various minor bits of code cleanup are also included in this revision.

This version of Byfl was tested against revision 223694 of LLVM,
Clang, and DragonEgg.