try to be more consistent
prefer eval_binding over config[:binding]
probably should never rescue Exception
avoid using TOPLEVEL_BINDING because of rubygems bin stub:

i just realized that rubygems bin stub would add two local
variables into TOPLEVEL_BINDING, one is `version', and the other
one is `str'. to avoid this, we must stop using TOPLEVEL_BINDING.

the consequence is that we can no longer rely on TOPLEVEL_BINDING,
thus we can only eval the -e argument after the shell has been
created.

the other consequence is that... nested shells can no longer
share the same local variables between shells. however since
in general we should avoid using any singleton and avoid
side effects, maybe it's really a good idea to separate bindings,
and then we would never, ever pollute TOPLEVEL_BINDING.

this could break something... please let me know if this breaks
anything. do people expect local variables could be shared
amongst shells? hopefully not...