enhanced ETag support

- added auto-ETag generation (for If-None-Match)
- added method to generate weak ETag
- ETag generation functions have optional data parameter
improved ::preconditions()

* now caches parsed headers
* optionally only return a single header's values
TemplateEngine now Serializable

Added serialize() and unserialize() functions. serialize() is especially constructed so that the resulting string has enough information to generate a weak ETag for the TemplateEngine object.
TemplateRepresenter automatically generates weak ETags for TemplateEngine objects

based on new serialization methods.
version bump