MapValue, like ArrayValue and SimpleValue, should check that destroy is
defined before calling it.  Some subvalue objects don't offer destroy.

@bug W-2120251@
@rev amcculloch@
Merging origin/fabbott/master-pending/destroy-fixes into master