Refactor the EGL implementation selection code in EGLWrapper.

Templatize some of the more repetitive initialize-check logic so that
we can just try and create every individual type, see if creation succeeded
and then return true if it did.

InitializeWrapper ensures that the window system gets initialized after
the function returns.

I thought about doing this with C++11 recurring templates, but I don't think that's possible now that I've read into it, as it would require arguments which had all those types.