Performance fix in calls to CompositeDBField::setValue()

These changes provide a 15% - 20% performance improvement, and as such justify an small API change in the 3.0 branch. It will likely affect anyone who has created their own composite fields, which is fortunately not all that common.

https://github.com/markjames/silverstripe-textilefield/blob/master/code/fields/TextileField.php#L56 is one known use of this.

I think we should push this to 3.0.