Redesign Cpp* type hierarchy to include CVR qualifiers

I was dreading having to do this, as it complicates everything
and even worse, I don't currently see a simple way to have a good way
to declare signatures using pcpp and have it match both the const
and non-const one, while maintaining the nice property of being able
to construct the wrapper using pcpp"..."(ptr). Might be possible with
some trickery of having pcpp return a union an implementing a `call`
method on the union. I'm almost convinced that `const` is the worst
feature of C/C++.

This is obviously quite a large refactor and as such I expect new
bugs to be introduced [so file bug reports :) ].

Nevertheless, this behavior is more correct and actually avoids
problems in the real world, e.g. because bar<foo> cannot be
cast to bar<const foo> and thus this fixes #33.