F/rewrite groupset

Added groupset rewrite object and added tests for rewrite functionality.
do we really need a separate fields() keyword for this? we usually call name-value pairs as values(), which is not the best name I can agree on that, but introducing a new keyword in one spot is probably making stuff worse.

we should either try to use the value naming or rename everything to a better name at once.

Once upon a time, we've agreed with the docs team, that we should call name-value pairs properties, but this is a largish project that should be followed up in both the code and the docs.