cfg: keep track of the loop headers.

we need to identify loop headers and then analyze them when we are
inside a loop body.  so, store the loop headers in the body node
to make lookup easy.
cmd,bounds: identify the loop header nodes.

from the basic block we have, follow the chain of loop header
nodes.  next we should start analyzing those header nodes for
things of interest.
cmd,wait: allow waiting until we hit a particular address.

instead of just a known symbol.  this is mostly useful so we can
break somewhere in the middle of a function call.
cmd: add disassemble and read commands.

disassemble gives the assembly for the current basic block,
generally.  it jumps through any unconditional jumps and will thus
go beyond the end of a BB if the BB has only a single out-edge.

'read' gives the value in the inferior's memory at the given
address.

... i really need to extend the language/parser at some
point, so that I can start combining these commands instead of
embedding each one inside others.
cmd,registers: accept an argument to print out a specific register.

particularly useful since our generic reg dump only prints a few
of them out.
testprograms,dimensional: touch (write) every elem.

essentially just to make the "expr < dims[i]" conditionals use
dims[i] instead of dims[i]-1 or something---thus making the
assumption valid that this variable holds the dimensions of the
memory being accessed.
cmd: abstract out conditional jump test/predicate to fqn.
bfd: use 'Symbols' instead of some custom C stuff.

Seems to be the same results, and i'd like things to move towards
getting rid of the C code, since Cgo compiles it so slowly.
cmd,cfg: add code to pop up the cfg after creation.
testprograms/dimensional: simplify a bit more.

it makes a giant CFG when we do it 'real', and this makes it
easier to present.
cmd: boundid added. it automatically identifies loop bounds.