Kill off cube map face targets already
It's terrible how we have to use these 2D cube map face targets to upload cube map texture images, but only for non-array cubemaps. If you've got a cube map array with an array length of 1, you get to treat it just like an array texture of 6 layers. This is nice, neat and simple; you use glTex*3D with them, and you can upload/download an entire mipmap level all at once.
Of course, because it's a different texture type, it has a different sampler and a different set of texture coordinates. So it's high time that this nonsense was put to bed.
The most effective way to do this is to simply do what modern texturing APIs do with cube maps. glCopyImageSubData considered GL_TEXTURE_CUBE_MAP to be no different from a 1-element CUBE_MAP_ARRAY. So does glInvalidateTexSubImage.
Since we're not going to get another round of deprecation+removal ever again, the best solution is to simply allow glTexImage3D, glTexSubImage3D, glCompressedTexImage3D, glCompressedTexSubImage3D, glCopyTexSubImage3D, and glGetTexImage to take GL_TEXTURE_CUBE_MAP. They will treat it in the same way they do CUBE_MAP_ARRAYs, just with one layer of 6 faces.
This would break no existing code, nor would it have an adverse effect on existing code. It would simply make it possible to completely avoid using those silly face targets ever again.