Refactor M3U8 loading

Extract the playlist management from videojs-hls.js and create a new object to manage fetching, parsing, and refreshing playlists. There is a state diagram that outlines the behavior of the playlist loader in docs/. This is a big change but with the addition of live handling, I think putting everything into the main plugin file is getting unsustainable.

@gkatsev @seniorflexdeveloper @heff: thoughts?