Change the MutableObjectOperator to allow immutable objects and remove the Reference<T> hack

This is a big change, so we need several pairs of eyes to look over this.

The basic idea of the change is that instead of always requiring calling code to hand in a record to be filled we now hand in a reuse object that can be reused but does not have to be. The signature of relevant methods is changed so that they now return a "record" instead of a boolean. Before this, the boolean would tell whether the record had been filled. Now we return null if there is no more data, so calling code has to take care of preserving reuse objects if it needs them later.