initial
Basic DSL #let operation to set variables and reload before eval

let(:var) {:result} will create a variable named "var" that will
always evaluate to the result of the passed block.  Any source
files detected as defining a piece of the result will be hard
reloaded prior to evaluation.  This allows for very dynamic
tinkering in a pry or irb session.
Reflect method removal where possible

When editing source and removing a method from a class, we should
have variables evaluate to reflect the code changes.  Some classes
are dangerous to unload and reload, especially core classes.  This
commit allows this to happen safely.
Only load files that have been modified since last eval

This speeds up evaluation time considerably