move Operation related code into a dedicated file
rename ot_test to better describe what it is testing
remove unused value from the Document type
move PathEquals into a util file

* ot.go is too generic
change PathEuqls() function to be private

* I can't see why anyone would need to acces it outside the package, so
 let's keep the public API clean
use an incrementing version number to refer to each document operation

* I'm not sure why checksum's were used, but since I'm aiming to
  replicate the sharejs wire protocol I need integer version numbers
remove unused hash function

* it was required when versions were addressed using a checksum, now we
  address versions using an int
move a private util method into util.go

* group the util methods together
rename a method and make it public

* it's quote legitimate for external code to apply an operation to a
  specific document version
correctly initialize Document.ops
Use the public API to create a document in tests
Add Document.Snapshot() method

* always returns that latest version of the document
experiment with delaying operation transfrom until read-time

* applying the operations just orders and stores them in the document
* When Document.Snapshot() is called, the operations are run in sequence
  to generate the requested document version
* This is be slower for reads, but more flexible
* The slowness can be resolved by persisting a copy of the document every
  20-30 versions. I'll get to that once I have persistence.
rename tests to follow a consistent naming scheme
Add a Document.SnapshotVersion() method

* returns any version of the document