fixed bug in directive wrapper

I was looking at the context (i.e. what my caller wanted)
-	when I should have been looking at the return value (i.e. what my callee was giving me)
but this should fix it
moved info methods to a sub-object

I was trying to avoid this, but it got too wonky without it
this creates a bit more complex interaction amongst the objects, *but*
-	it enabled me to get rid of adding attributes on-the-fly, which was a code smell, and
-	it enabled me to make CustomCommand immutable again, and
-	it enabled/forced me to refactor the % expansions into a common routine, and
-	it forced me to formalize the fact that conditions are eval'ed and allow code in them, which
-	enabled/forced me to change the way commit was using ternaries calling fatal() directly, and
--		instead to now use normal conditionals with ! pragmas
in fact, the only downside I really see is that now you have to quote any non-bool %info methods in code and/or conditions
-	e.g., `%status =~ /working directory clean/` now has to be `q{%status} =~ /working directory clean/`
-	you can't use '%status' because status might (and usually does) contain single quotes
-	and you can't use "%status" because status might (and usually does) contain double quotes
-	so you're pretty much stuck with the explicit delimeters
back on the plus side, there's now no ambiguity between %info and %hash
-	(well, I could at least _make_ it so there's no ambiguity if I wanted to)
-	(theoretically)
-	(although, now that I think about it, it would be pretty hard)