WIP: Better backend treatment

Moving toward what @rougier called "unity". So far all I've done is change how we assess whether backends are available. Still much to do, including:

1. backend.available use (instead of ImportError) (done in testing, needs to be done for `app=None`)
2. gl configuration
3. context sharing
4. enumerating backend capability