Add function to get true number of mips in GL texture

* If it's immutable, fetch immutable size, otherwise calculate number from
  top level width/height/depth.
* Then clamp by TEXTURE_MAX_LEVEL.
* THEN we need to go through each mip and check that it's been set if the
  texture wasn't immutable, since some mips might be uninitialised and
  that is legal, as long as those mips aren't used (e.g. by point sampling
  or as a FBO attachment).
Favour DSA texture queries, avoid binding, use GetNumMips

* We only bind where necessary to create (as I don't want to rely on
  glCreate* from ARB_dsa/4.5 yet).
Check extensions by enum and centralised checking for 'hacks'

* I need to double check the cubemap texture size query thing, I think I'm
  getting different results on a different nvidia driver (and maybe card).