Add the 'commands' command to Rubinius' debugger

The 'commands' command allows the user to specify a list of debugging
statements that are automatically executed whenever a certain breakpoint is
triggered.

This command takes inspiration from GDB's 'commands' one.
Add specs for Kernel#extend
Fix Kernel#extend when no arguments given
Improve debug output for JIT inlining

This also prints all types for all other cases in the inlining when we
don't inline or inline a primitive.
Add a spec for Enumerable#chunk when given a mutable initial_state
Fix Enumerable#chunk when given a mutable initial_state

* Duplicate only the every first iteration. Not every iterations.
* Use #dup instead of #clone to duplicate the object.
Turn callsites into monomorphic sites

This makes sure these call sites don't go polymorphic when using
different String subtypes. This happens quite a bit in Rails, where
different types end up being used.

By calling .equal? on undefined, we make sure we check against the same
object all the time, turning the call site monomorphic and better
inlineable.
Use binary encoding directly instead if finding it with the index
Merge pull request #2440 from kachick/fix-enum-chunk-with_init

Fix Enumerable#chunk when given a mutable initial_state
Merge pull request #2435 from kachick/kernel-extend-check_args

Kernel#extend should raise an ArgumentError when no arguments given
Slightly better inspect for Rubinius::Channel
Don't skip waiting if no one waits yet

This was causing a race condition where the debugger thread wasn't
waiting yet, but was going to. This meant the executing thread didn't
stop and continued to run.

There is no problem here to wait, since that was already explicitly
requested. We don't know who will be first here, so just not checking
this is the best solution.

Fixes #2393
Merge pull request #2432 from flavio/debugger_add_commands_command

Add the 'commands' command to Rubinius' debugger
Fix and add a spec for ENV#fetch
Fix ENV#fetch for rasing exceptions from X19

ENV#fetch should raise KeyError instead of IndexError from X19.
Breakpoint might be nil
Merge pull request #2437 from kachick/fix-env-fetch-exception

ENV#fetch should raise KeyError instead of IndexError from X19
Add a spec for Time#round
Fix Time#round for copying timezone

Ported from Time#{+,-}.
Add destructor for ImmixGC

We need to cleanup the walker here if it has been allocated, otherwise
we have a memory leak on shutdown when we don't clean this up.