Add the urify method
Pass all datanodes to the engine
Materialize basenodes as a cache, so Jet will not re-select them
whenever they are needed.

Add rest_path to Jet::Body because of this - basenodes is no longer a
resultset.

Also, add a few helper methods to help find the basetype and a node from
the cache.
Merge branch 'feature-datanodes' into feature-urify
Shuffle methods a little around, find the domain node and put it on the
stash, and add a urify method.