Move emit into the type, get rid of Specializable
Don't store defaults unless we write to them.
Also remove cache_proc and "context" and let callers decide how to store values