Rewrite of assembly cache
Add unit test for assembly cache
Remove assembly cache mechanism, leave only versioning
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
Style improvement for versioning

Remove George's hand-tooled namespacing and make the version
manipulation routines private.
Move Dat version zeroing to the right point.
cow copy parloop implementation

First stab at a copy on write implementation using parloops.
Apparently working copy on write.
Use individual asserts in version tests
Extend tests to ensure that copy on write actually produces the right answer.
Conceptual documentation of versioning.
Cuda fixes

Disable copy on write tests for cuda backend.
Fix some missing versioning decorators and calls for cuda.
Merge pull request #311 from OP2/smartop

Object versioning