better code evalutation infrastructure

renamed code_expand to evaluate_code
added evaluate_expression
the RHS of an env assignement directive and the LHS of a conditional now go through the same codepath
-	that means that you can now refer to other env vars when assigning to an env var
-	which I think is what people will expect
added tests for env assignment at least
rearranged tests for mock execute to handle stderr output and also to trap exit (as in fatal)
-	this will enable me to test the fatal directive, for one thing
-	but mostly it makes test failures more intelligible
-	Test::Trap FTW!
major refactoring for executing action directives

broke process_action_line() into parsing (process_action_line) and execution (executive_directive)
this gives me better localization to do things like implement --echo
also will make it easier to consistently handle action directive failure
-	e.g. could print out remaining lines
-	also possibly implement --continue feature
also better handling of things like expressions and complex directives (e.g. conditional, which contains another directive)
for instance, conditionals can now contain other conditionals, which they couldn't before
-	(not that I'm sure I want to encourage that sort of behavior, but maybe it's useful)
one last refactoring for action line echoing and execution

old way: check pretend() and call pretend_msg()
new way: call handle_output() and let _it_ figure out whether to echo or not
handle_output() is also now sent a coderef that performs the actual execution
-	so it can figure out if the command shouldn't be executed at all (for "command" disposition with --pretend, e.g.)
now I have a single place to handle output for --echo (coming up next!)
--echo implemented

FINALLY!!!
took a lot longer to get here than I'd hoped, but we got a lot of excellent refactoring on the way
plus a hell of a lot more unit tests
plus the beginnings of a testing infrastructure to make further unit tests easier to write