Instrument Ion to record optimization information.

Records optimization attempts, successes and failures for getprop and
setprop operations, for analysis by a JIT coach.
Merge inlined script's optimization info with their caller's.

This is to allow the profiler to see optimization events inside inlined
functions without needing to recognize inline frames (which it doesn't).
Add a mulBy5 macro-instruction.
Fix typo in comment in macro assembler.
Comment explaining allocation behavior of optimization info.
Have counter that identifies compiles.

For use to track which profiler samples correspond to which compiled
versions of scripts.
Emit profiler events containing optimization information.
Push compile IDs to the SPS stack.
Sample compile IDs when profiling.
Make object type printing available outside of debug mode.

Otherwise, optimization info logs report null pointers as object types.
Allow printing constructor when printing object types.

Format includes constructor name and location, plus the address of the
object type. The latter is necessary to disambiguate between different
object types that have the same constructors, as happens when using,
e.g., prototype.js's class system (as in Octane's raytrace.js).
Allow logging optimization attempts with no associated property.

Necessary for non-property-related optimizations.
Add helper to log MIR types.
Add optimization logging for getelem.
Add optimization logging for setelem.