Rewrite of assembly cache
Added unit test for assembly cache
Removed assembly cache mechanism; only versioning is now in PyOP2
Modification to _op for Dat objects to properly support subclasses
Fix lint errors
Merge fail
test_versioning now fails rather than crashes
Ensure touching Dat.data bumps the version number.
Default to zero initial version only when no data provided.
Make copy on write testing more robust.

Copy on write testing was using identity of numpy array objects as a
proxy for identity of the underlying data. This is unsafe as many
array objects can point to the same data. This commit fixes this.
Clean up constant used in test
Remove stray code from the merge.
Remove unused copy on write shallow copy.

Apparently the default version is sufficient in the matrix case.
Remove seemingly unused nbytes method.
Update matrix zero comment.
Style improvement for versioning

Remove George's hand-tooled namespacing and make the version
manipulation routines private.
remove another spurious nbytes.
Move Dat version zeroing to the right point.