Fix equality on OptionalValue (fix #184)
Optimize 'shift' and 'diff' functions (fix #183)

Previously, these were implemented using floating window, which was terribly slow.
I added new basic operation to the index representing "shifting", so now we just
need to copy the data (skipping over the values that "drop out") and create a new
index (excluding the dropped out keys). I also added some documentation.

The performance improvement is orderds of magnitude (from seconds to milliseconds),
so I'm not attaching any specific numbers.

Aside, I also accidentally discovered https://github.com/BlueMountainCapital/FSharpRProvider/issues/77
(and made the test here more stable) and I improved the build script to avoid
running tests twice.