Use frame to descend directives.

Using a frame object to descent directives, however this has caused the
minified and gzipped size to grow significantly. Only 0.8k, but it will
probably perpetuate as I add support for different forms of tags.

I'm checking this into a side branch to revisit after, or shortly
before, the initial release.

File                             Raw         Min         Zip     Min/Zip
index.js                 25653/25.05  8719/08.51  6768/06.61  3183/03.11

File                             Raw         Min         Zip     Min/Zip
index.js                 25439/24.84  8048/07.86  6658/06.50  3106/03.03