Use rvalue references for template Func params.
Add read_table function that takes an init function.

Calls the init function before iterating. Mostly just useful for
reserving storage.
Make sort_by/map non-destructive and remove block ID.

Just because destructive methods are weird in Ruby.

As for the block ID thing, they count up from 1 and are sorted by index
in the data table, so there's no real reason to encode the ID alongside
the data itself.
Note removal of block ID from bytecode.
Remove unused unit read_labels member function.
Rename label_relocations_t to relocation_map_t.

It's useful for stuff other than labels. Namely: data and anything else
using integer references.
Move instruction_ptr_t up in the class def.
Remove unused data types.
Add new data block types and fields.

_data is simply a buffer containing all data loaded. It can be until
the unit is in use by the VM. This isn't really an issue since the VM
will copy the entire unit over (because it may need to relocate data).
I'll probably tweak this later to ensure data blocks are 8-byte aligned
or something along those lines (since it's the max peek-able size).

_data_blocks is the table of all data block IDs, offsets (into _data),
and sizes.

_data_relocations holds all data relocations. Might be empty. Used by
the VM (vm_state_t) when it copies a unit to relocate all block IDs to
whatever the VM assigns to them, since it's not required to preserve
the IDs and it's easy enough to reload everything.
Add data reading member functions.

Still contains debugging messages, of course.
Add each_data member functions.

Just iterates over each data block in the unit, passing it to the
function given.
Remove source_t.

Replaced some things already, others need updating.

Missing:
 - bind_callback
 - some sort of fetch_op function for unit
 - set_source needs to set up the blocks for the unit's data blocks and
   relocate block IDs.
Add fetch_op to vm_unit_t.
Re-add call to fetch_op.