Proper EOT / EOS handling

Once completed this will fix: #160, #222, #172, #168, #169. Currently the main issue remaining is how to handle case where we encounter an error and previously would advance to keep playback running. With the EOT handling track changes are async and our old approach is broken.