DecoderAPI: use std::chrono::duration for decoder_seek*()

For type safety and code readability.
Chrono: add template parameter to ToScale()
Chrono: add method ToDoubleS()
Chrono: add implicit conversion operator from std::chrono::duration
DecoderControl: use std::chrono::duration for Seek()
PlayerThread: check if total_time is valid before using it
PlayerControl: use std::chrono::duration for Seek()
Chrono: add methods IsZero(), IsPositive()
Chrono: add class SignedSongTime
Playlist: use std::chrono::duration for Seek*()
DecoderControl: update API documentation
Chrono: override operator+ and operator-

Make sure we return the correct type.  This obsoletes the cast
constructor trick.
DetachedSong: use std::chrono::duration for start_ms and end_ms
db/LightSong: use std::chrono::duration for start_ms and end_ms
db/simple/Song: use std::chrono::duration for start_ms and end_ms
PlaylistEdit: pass std::chrono::duration to SetSongIdRange()
DecoderControl: use std::chrono::duration for start_ms and end_ms
Chrono: add method SignedSongTime::Negative()
Chrono: add methods ToS(), RoundS()
Chrono: add SignedSongTime::FromS(unsigned)