Add salsa
Convert to duration-based approach (fixes #5).

Not really tested yet. Also uses a factory-based approach to retrieve
songs from the caller.