Refactorings, cleanups, and some semantic changes.

The pre/post_cond/task blocks are now run via instance_exec on
the object on which the method is being called.  This means that
these blocks can use instance methods of the object directly.
However, this does mean that return can't be used within the blocks,
though maybe I can fix that.

Instead of depending on fetching parameters by name, we just pass
the parameters along directly to the blocks.  Less chance of
breaking if the names of the arguments change (though more chance
if they're just shuffled, but normally these would be paired with
a typesig that'd likely fail anyway if parameters were shuffled
without changing the spec).

Instead of deep, nested reopening sequences in the spec, just use
:: to drill down.

One change I haven't made that should be made eventually: use a
non-global namespace for passing information between specs.  Maybe
some hash kept in the Dsl module?