Add history controller to core API

Builds upon #803 to implement #423.
I'm usually explicit with `None` comparisons, since `track.name` could explicitly have been set to e.g. the empty string.

As for `if track.artists:`, that's a collection, so checking against `None` doesn't make sense.