Initial pass at types

First run at types, trying to keep as much unnecessary and registrar-specific stuff out as possible.
We probably don't want all of these details for release one; just the absolute minimum to implement the story.