Huge debug rewrite. The code is now simpler, saner, and easier to read.
Huge debug rewrite. The code is now simpler, saner, and easier to read.

Assign used to look like this:
    [0] assign        [var #4] [literal #2]
and debug would always dump the literals at the top. This required the user to
look up top to see the value of the literal being referenced. This was a bad
way of doing things, because line numbers were not added, and info was crammed
to save space.

In the new debug, assign looks like this:

|____ [0] assign   (at line 3)
|     ====> (integer) var a (from line 3).
|     <---- (integer) literal (10)
|

* Assign indents the values it takes in, so ownership is clear
* One | by itself on the last line is used to separate opcodes so things don't
  look like they run together.
* Line number for assign!
* The types are printed for the values.
* The var has a name, and where it came from!
* Arrows indicate what is occuring. <---- indicates being sent, ====>
  indicate being written to. Another arrow type is used for jumps.
* The result is indicated by what the arrow is pointing to. Away means it is
  being read, but ====> is intuituve because it points to the value. (a subtle
  'it goes here' indication).
* Literals are now printed on the referenced line.
* Line numbers are printed for values.

Additionally, storages now reference a specific address instead of which
number they are.

This patch is a little rough around the edges. It's now clear that some ops
need to be changed badly (order of values, and other stuff). So that will be
fixed before debug is totally fixed.

boardwalk/lily,boardwalk/lily,crasm/lily,crasm/lily,crasm/lily