
 Todo:

 -> floats
    
 -> Closure layout structures

 -> 'complex' constructors (I think 'partially instantiated' was the term
    that everybody else was familiar with)
    
 -> Make the bytecode debugger interface nicer (add breakpoints, step,
    more user friendly machine state dump etc.)
 -> Add variable type information to bytecode debugger

 -> Rest of the Unary ops (Zoltan said to ignore them for now - I haven't
    actually even been able to generate mercury code that actually uses 
    the tag ops)

 Efficiency:
 -> Hash module & predicate names on load rather than linear search

 -> Remove do_fail & do_redo switches between native/bytecode when
    not necessary. (Currently reverts to native code to execute
    all do_redos & do_fails)

 -> Remove fixed size code limit
 -> Remove best case 64MB code size limit (worst case is 16MB)
    [can easily be upped to 256MB (64MB worst) but beyond that will
    suffer a performance penalty -- should check how much this is
    actually going to be -- bytecode overhead probably is a lot higher]
 -> Alternatively, is labels, modules & predicates can all be put in
    a hash then can store bytecode id/arguments in one contiguous
    aray which would be best for performance
 
