Players should be constructed in idle state

Fix issues encountered
* play() should not set a start time
* cancel() should not nullify the source