GenericMemberIterator: fix comparisons/differences for mixed-constness expressions

Previously, `MemberIterator` expressions (comparisons `==`, `!=`, ... and differences) failed to compile in case of mixed `MemberIterator`/`ConstMemberIterator`.  For this reason, the `EraseMember` function contained an explicit cast as a workaround.

This pull-request drops the workaround and changes the signatures of the affected functions to always take a `ConstIterator` (which can be constructed from a `NonConstIterator`, if needed).  Some additional tests are added to `valuetest.cpp` to check the various combinations.