Signed vs. unsigned warning fix
Removing asserts that are always true

Since input is unsigned and they check that it's not negative
Making this assert more readable

And incidentally, more correct as the return of GetValueWidth() is
unsigned and so everything became unsigned there, making the assert true
by default. New version checks correctly.
Removing asserts that are trivially satisfied
Fixing signed vs unsigned warning
Let's make the compilation warnings a bit sane. Turning off -Wextra

This actually helps because we can now concentrate on the actual, real
warnings. There aren't many and they can be fixed, we just need to
decide how to fix them.

Besides, -Wextra turns on warnings that are dubious. E.g. it tells us
that a virtual function's default value should not be given as
it's not used. However, if it's removed, then the compilation fails
since the default value is not given for the actual, derived classes. So
that warning, for example, will always be there, just cluttering things
up. There are similar examples that can be given.