generate copy method

These changes allow you to create a builder with a copy method.

This copy method takes an instance and copies it values into the builder. This is helpful, when you use a builder to create instances of immutable objects and you have to create copies of those instances where only a few fields have changed. This is much easier with a copy method, as you don't have to build the whole object but instead, you only call copy and then call withXY for the attributes that you want to be different in the new instance.