Datahandler cleanup

This standardizes the inheritance model used by DataHandler.

This is split off from the full-closure pull request. It can be reviewed independently of the typed options PR.