Use MethodProxy-backed version of spec DSL.
Move gensym inside MethodProxy.

Also initialize with name and class so that we can reach that info if needed
during registered blocks.
Fix some small issues I saw while working on this earlier.
Refactoring splitting DslSpec and MethodProxy.
Changing the Dsl basis to be more general than a basis for specs.

Now the basis can describe other DSLs, not just specs of DSLs.  There
are two entry points: entry, which describes and creates a new DSL entry
method, and spec, which describes an existing method.  The DSL keywords
that overwrite methods (action/dsl_rec/dsl) are only useable from entry.
Forgot the HO spec constructors used by some of our examples.
Need non-overwriting dsl keyword for specs.

Probably best to eventually come up with a different name for this, but
for now, this should get our examples running.
This was a class (well, module) method in the original, and still should be.
These blocks are passed in as regular arguments to pre/post, so don't use &.
Add initial cut of inspect, a thin layer over TracePoint.

Arguments/block argument to inspect are passed to TracePoint object
constructor. Also adds a pre_task/post_task for this method that enables/
disables the trace.
Since this isn't called with a block argument directly, must check this.

This is starting to get kinda ugly, since maybe it takes a proc argument
that isn't a block.  Hmm.  Maybe this needs to be handled differently so
we can really call these with blocks.  Maybe install the block argument
to pre/post as a method on the object in question (with a gensymed name)
and just call it?
Have pre/post blocks handle blocks appropriately by making blocks anon. meth.

Only problem with this is that specs that _don't_ know how many arguments
to expect, like the HO logging spec example in routing.rb, have to take
a rest arg to collect all the arguments (that they may not use).
Have to add |*args| here for reasons listed in previous commit.
Change the return protocol from pre blocks to return a hash with args/block.
This makes Dsl::Spec#dsl much more closely related to Dsl::Keyword#dsl.
Initial version of infer keyword.

Main things remaining to do:
  - if Array or Hash, infer the parts/sizes.
  - if Numeric (maybe just Fixnum), try and figure out ranges.
  - if Symbol, figure out if only a few possible options.
Try and handle this better via a lattice-like structure.
Be more OO, less procedural.
For some reason, these args weren't being propogated.
Make gensym shared across all, also add method name to pre/post block methods.