rename `pulse` -> `generate` for consistency
rewrites to support demuxers
add demuxer support (custom event routing)