Update video player code

Using AsyncTask for anything with a deadline is a bad idea, because
the system assigns them background priority.  This replaces the
use of AsyncTask in the video playback activities with a custom
thread wrapper.

This induced a bit of refactoring, which seems to have generally
improved things.

Also, waxed poetic on MediaCodec decoder loop structure.