Players should be constructed in idle state

Fix issues encountered
* play() should not set a start time
* cancel() should not nullify the source
The tests were based on the implementation of `play()` and `reverse()` forcing start times, but they shouldn't, they just put the player into the pending state.