Several decent-sized changes

* Changed default ibGibBase.Gib implementation to call specific overload
implementation methods in derived classes.
* So, in order to get a specific type signature, e.g. Gib(ibValue gib),
then just need to implement protected GibImpl(ibValue gib) and it will
pick that overload out exactly.
* Also does some inheritance matching and I've written tests for these.

* Removed/Sorted unused using statements throughout solution. Probably
could have done this in its own commit, but I just did it because I've
been putting it off.