vis2d: actually implement tracking dimensions.

the BPs were set before, but we never computed/found the indices.
some debug code for identifying where a particular address is.

i.e. which library it's in, or on the heap.
readmem: handle errors better.
debug: better error detection, + multiple BP issue explanation.
debug: remove trace, unfortunately.  too verbose :-(
gfx: improve error message concerning dimensionality.
testprograms: fix indirect hopefully force allocations.
testprograms: make sure c++ gets the same "frame pointer" options.
vis2d: filtering mallocs by calling fqn is optional.

sometimes we just don't know where we are.  We might get eaten by
a Grue, but we should still track memory: it's likely that we're
just missing some debug information.
InfEvents: keep a set of callbacks per breakpoint.

I don't think we actually need an actual set, because I believe
every time we want to 'overwrite' the callback pointer, we are
actually overwriting it with a pointer to the *same* callback.

Unfortunately, Go does not allow one to compare function pointers,
so there is no way to force that belief via runtime checks.
Instead, we just keep a set; I guess it could theoretically be
useful to have breakpoints for different kinds of things at the
same instruction address.
just a minor to change to how allocs get printed.
vis2d improvements to debug messages and error reporting.
vis2d: insert header breakpoints AFTER symbolic exec/etc.

The inserstion of a breakpoint could effect how we interpret this
stuff.  Not good; I haven't implemented what "int 3" means in our
symbolic executor.  Also, that doesn't even make sense, on
multiple levels.