added tagging of primitives

essentially whenever a primitive function is accessed for the first
time, it is wrapped in a cell and stored in the guest interpreter top
level environment, so its cell is persistent and changes to tags are
therefore persistent.

closes #20