Removed expansion lock
Changed unset_hazard_pointer into a wrapper object

This way, people can create the object after setting the hazard pointer,
and it will be unset when the unsetter object goes out of scope. This
removes the need to keep track of all exit points to unset the hazard
pointer.
Small cleanups

Filled lines to 80 characters, and changed the static error strings used
in the iterator to static errors that could be thrown directly.
Added more warning flags to compilation and fixed warnings
Refactored partial keys

Split the functionality away into two classes. One which contains actual
partial key functionality and another which mocks functionality. We use
the real one for non-simple types and the fake one for simple types.
Fixed an unused-variable warning
Changed all the block-style comments to line comments

They are more consistent and text editors handle them better.
Changed all the type *var declarations to type* var

It's more normal and easier to read.