Replace __getattr__ and __setattr__ with descriptors.

This generalizes __getattr__ and __setattr__ so that Field instances are
actually responsible for generating the mutations and expanding their
own value. That way ListField has all the context it needs to
instantiate a ChangeTrackingList, without hard-wiring anything.