Refactor...

- Add ChannelCount protocol for efficiency: sampling the sound at time
  0 can cause stream-based implementations to rewind undesirably.
- Rename Sound protcol's sample function to amplitudes and run
  sampling through sample function. This pulls out-of-range function
  out of each implementation.
Clean up some sound processing functions a bit.