Add history controller to core API

Builds upon #803 to implement #423.