Initial public key loading work

- [ ] I think the use of PKCS8/PEM might be wrong?
- [ ] Docs
- [ ] Tests (need vectors, where do they come from? Just re-process the private keys?)
- [ ] Still a bit too much code duplication
Why do you think the "frontend" should be responsible for figuring out key types? What if we moved to backends having a single `load_public_key` / `load_rpivate_key` method, and then some utilities for them to guess key types for those that don't have them hardcoded?

Although, should we maybe limit it to `load_pem_public_key` instead, and deal with stuff that isn't a PEM later?