Project metadata updated
Unused Template constructor removed
Readonly strings const now

Punctuation's readonly strings are const now. The char arrays can't be
made const too, unfortunately, because the language doesn't allow it.
Template constructor no longer used (for real now)
Gave TemplateTag a static name
Revert "Gave TemplateTag a static name"

This reverts commit d5df9459b13f50a0b6a3dda4de584106baf3725d.
Gave TemplateTag a static name
Gave TagData a constructor and PathMapper

- TagData has a constructor now so changes to it will be noticed in the
future.
- TagData's properties are read-only to the public now so changes will
be noticed.
- TagData has a PathMapper method to map a string path to a TextReader
for the template.
TagData uses readonly fields

It turns out structs are preferred to be immutable, even for the
struct's own code, so now is.
TemplateTag now constructs a proper template

The TemplateTag constructs its own template using its TagData's Param
and PathMapper properties.
Added Map method to Template

The template now holds the method to map pathnames to TextReaders.
TagData no longer stores path mapping method

TagData's path mapping method is held by Template now. TagData doesn't
need it any more.
TemplateTag updated for new path mapper location

TemplateTag now refers to the template for its mapping method instead of
its data parameter.
TextTag modifies data properly now

TextTag now modifies its data parameter by creating a new TagData
instead of mutating the old one (which is an error now)
EscapeTag modifies data properly now

EscapeTag modifies its data parameter by creating a new TagData instead
of mutating the old one (which is an error now)
Raindrop constructs TagData properly
Raindrop updated to use name+mapper

Raindrop was updated to use a name mapper in its constructor instead of
a TextReader so it's compatible with the TemplateTag.
Removed unneeded safety checks from Raindrop

- Raindrop's constructor doesn't take a TextReader any more, so checking
it for null isn't necessary.
- Raindrop's mapper may be willing to handle null/empty file names, so
running that test on the name could cause trouble.
Updated RaindropView to match Raindrop

- RaindropView has a new Map method that maps a virtual path into a
TextReader containing a template's text.
- The Render method uses a lambda method to capture its
viewContext.HttpContext.Server.MapPath method and pass it to the Map
method.
- The Render method passes its lambda to the Raindrop constructor.
Parser builds TagDatas correctly

- ReadEof uses the TagData constructor
- ReadTag and ReadText hold off building a TagData to the last minute,
then use the constructor