WebVTT Reader/Writer, more object-oriented approach

Hi,

Here at Rdio, we have added WebVTT as a supported format (albeit minus styling), as well as changed up the whole intermediary format into a class-based object-oriented approach. This should make the code a lot cleaner and easier to read; in addition, it is easier to now create new Readers / Writers or extend current functionality.

The tests were updated slightly to work with the object-oriented approach.

The external interface to the caption converters should remain the same as before; for example, this should work exactly the same before and after this patch:

    captions = SAMIReader().read(sami_caption_string)
    dfxp_caption_string = DFXPWriter().write(captions)

Mainly, it's just cleaning up of the internals, and WebVTT support.

Thanks!

 - Joseph Norton, former PBS intern :)