Create base infrastructure for NodeTree interface

Added Node class, and NodeData (with derived classes), to support
the elements and attributes of WebVTT and TTML markup.

No tests or actual population of these nodes are possible, as of
yet.
Added test suite for EmptyNodes
Added destructor for Node objects... derp.
Added more Node tests and fixed some bugs

The Node API has changed slightly (the children() method
will only return a const reference to the internal node list).
This shouldn't be a problem because using the children() method
isn't very useful anyways, so don't do it!

There are new tests for the shared InternalNode operations, as well
as some tests for the VoiceNode. Tests for other WebVTT internal
nodes are forthcoming.
Add Node copy constructor

This fixes some memory management issues that were occurring, due
to Nodes being freed before they should have been.
Add TimestampNode and TextNode tests

Just more tests to ensure that these types methods behave as expected.
Add tests for BoldNode, ItalicNode, and UnderlineNode
Add tests for RubyNode, RubyTextNode, and ClassNode
Add test suite for LangNode

Next up are more changes to the Node API
Add 'lang' attribute to Node objects

Also separated 'VoiceNodeData' from 'InternalNodeData' as it is
a special case due to its extra attribute. This removes an unneeded
comparison.
Add first implementation of WebVTTTokenizer
Add tests for tokenizing the TimestampTag
Add tests for other token types, fix minor bugs
Implemented WebVTT CueText Parser

Node API has also changed -- StyleClasses renamed to
ApplicableClasses, and its type has changed from String
to List<String>.
Add some WebVTT CueText Parser Tests

Also fixed several bugs, such as incorrectly appending
to WebVTTToken's name instead of WebVTTTokenizer's buffer
when processing alphanumeric ASCII in the EscapeState.
Add test for nested ruby-text markup

This is currently the most complicated test, and a few things
needed to be fixed in order to work correctly. I'm not sure if the
way things were fixed is necessarily correct, hoever. Prbably the
right thing to do is make some changes to WebVTTTokenizer::nextChar(),
rather than support byte-by-byte appends
Refactor WebVTTTokenizer::nextChar() to return UCS4
Implement Hierarchical node-visitor, with tests, +bugfix

The VoiceNode was never being created in the WebVTTParser. This
has been corrected.

Additionally, support for returning pointers to items in the List
container, which is helpful for certain types of objects without
relying on potentially unsafe "return reference" kind of stuff.
Don't call leave() on nodes that were not entered()
Use endOfFileMark instead of position >= length()

This allows certain lines in the tokenizer to actually be
reached, so it needed to happen.