Remove self-comparisons from tests

This should fix #130.

It turns out PHP's `serialize()` function just calls the `...->serialize()` methods provided by the `Serializable` interface in `Snak`. See the implementations in `SnakObject::serialize` and `PropertyValueSnak::serialize`. Only properties that are used in these methods become part of the serialization.

This patch:
* Adds tests to make sure the `getHash` implementation is static and doesn't change, e.g. when new fields are introduced.
* Adds basic tests for `No`- and `SomeValueSnak`.
* Removes strange self-comparisons from tests.
* Simplifies some loops.
* Renames some strange variables.
This test illustrates why using `serialize` on the object is bad for the hash. The class name is part of the input.

Not sure why you go to the effort of replicating the way serialize constructs the string. Why not just have some snaks and their corresponding hashes, and see if they still match? That will catch things such as changes in the class name. It will also remove knowledge of the implementation from the tests - why would it know `serialize` is used?