Refactor the new copy infrastructure

@athanatos asked that I refactor the copy infrastructure we have so that it can be more easily used by non-copyfrom users. This is the result.