consolidated the .copy methods

- all the grobs can handle an instance of themselves as an init
argument, in which case they return a copy anyway
- the superclass now implements .copy and does an ouroboros-style init