Attempt to seek repeatedly when the seek fails

On Samsung D8000, seeking on commencing playback tends to fail.
Make multiple attempts until it succeeds.
Failed seek while buffering remains in BUFFERING state

Change behaviour so that attempting to seek while buffering results
in the API remaining in the BUFFERING state if the seek fails,
rather than returning to PLAYING and then reentering BUFFERING
later. The seek is retried until it succeeds.

Features a failing test that needs to be addressed.
Remain in BUFFERING state when attempting to seek

And exit BUFFERING state as soon the seek succeeds or is no longer required
Test to ensure we don't reenter BUFFERING when seeking

Test revealed that we were returning to PLAYING state inappropriately -
fixed.
Refactor private _deferredSeek function
Handle playFrom(), playFrom(), pause() correctly

When the client calls playFrom(), playFrom() again then pause() to
start media playback, perform the seek, then pause, ensuring the
seeked-to time is available when the pause occurs. (Samsung)
Moved logic around in current time callback
Refactor to simplify a compound conditional
Refactor failed guard clause into if-else
Ensure internal state is cleared up on reset()