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 variadic 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.

I haven't had the opportunity to test this manually, as I don't have the tools to compile on android, rpi or the like at the moment.