recursive check for dirty

The current implementation does not allow for nested subsets. This patch adds isDirty() to the Recursive_ArrayAccess class so that it will check, aggregate, and return the value of dirty for itself and any nested objects. The result is that if you have nested subsets, and you change a value in one of them, write_data can properly determine whether it should update the database or not.

=C=