Another typing experiement

This code takes the Types experiment in the OPS sandbox and begins to pull
it apart to separate data types and data operations. This allows the type
system to be enhanced with new operations going forward without having to
extend existing interfaces.