1. Rename most of the types and functions to make it easier to use
   multiple modules from this package at the same time.  For example,
   now we have 'ProgramAp' and 'ProgramAlt' types with different names,
   instead of having both the same name.

2. Introduce an 'Operational' class with a generic 'singleton'
   function, so that singleton programs are now generic over the
   program type.