Breaking up emit: extract an Emitter interface, separate
EmitterAccess, rename implementation cup_emit.