Weaken tests to only assert what we care about

There's a risk that some people are (as the tests were) directly
testing that the syntax nodes are instances of specific classes and
will thus be broken by the changes that follow.  Since such
class-based logic is

    1) generally harder than just calling methods on the nodes,
    2) against widely known ruby best practices (e.g. the duck
       typing principle) and
    3) against frequently discussed treetop best practices,

this seems a reasonable risk to take.
Add a benchmark with named modules
Use the dynamic extend avoidance dodge in all cases

This branch uses a version of the dynamic extend avoidance dodge as a
quick and dirty test of what like would look like in a steady state
without any object extensions.  Basically, instead of extending
descendants of Runtime::SyntaxNode we replace them with like-populated
objects of classes that descend from their class but include the
requested module, and rather than creating a new class each time we
memoize the finite (typically small) set of classes and reuse them.

Running the benchmark, we see new classes being created for the first
parse or two, and then no more.  Unfortunately, we also see a net
slowdown, as the overhead for the casting mechanism is too high to use
unless we must.
Where it's easy to do so, build extended classes at compile time

This won't eliminate the calls to Object#extend which flush ruby's method
cache, but it will greatly reduce them at relatively little cost.