This is the first step towards supporting custom tags. There are wrinkles I need to work out, since I'm not 100% sure what the finished code will look like.