Added else and elif statements.

- Updated documentation.
- Added eval() method to DataTemplate that takes an ostream to write to.
- Change the other eval() to use the new one.
- Made templ_text parameters of parse() functions const refs.
- Added elif and else node type enums.
- Updated NodeIf to support else and elif. It now has a pointer to the
  next elif/else branch of the if, so a linked list will be formed of
  all the branches of an if statement. It also has a NodeType data
  member so the NodeIf class can represent if, elif, and else nodes.
- NodeIf ctor determines the node's type from the statement tokens.
- NodeIf::gettext() passes the request to the next elif/else branch if
  is_true() returns false.
- NodeIf::is_true() updated to handle elif and else.
- Some code optimization of the statement tokenizer.
- Refactored template parsing into a single non-recursive pass all done
  now in tokenize() with the help of a node stack. This was required to
  properly process elif/else statements. It also improves performance
  and reduces memory usage.
- Removed parse_tree().
- Rewrote the parse() overrides to use DataTemplate so there is only
  one template processing path.

Signed-off-by: Chris Reed <flit@me.com>