Is it possible to use OpenPGP/SSH key pairs to authenticate with a web application in a secure fashion to replace traditional
password-based authentication?
Yes. It is quite possible.
If it is possible, what will the authentication steps look like? Is there perhaps a known good implementation of such an idea for popular languages and platforms like Ruby, .NET, Java or Python?
See my answer for the next question.
If it isn't possible, what are the reasons? Is there perhaps a constraint on web browsers accessing the GPG keychain or SSH key
file?
Processing SSH and OpenPGP keys in a web app is possible with third party libraries (especially C or Java libraries given their rich ecology), but you would be missing out on leveraging the most common existing solution - SSL/TLS.
The best bet would be for users to generate X509 client certificate signed by your server to authenticate themselves - because then your web app can simply rely on the web container (Catalina Tomcat, ApacheD, IIS, etc) to perform seamless encryption and authentication for your application.
Under the hood OpenPGP keys have the same RSA exponents as a X509 certificate, so tools such as openssl
can convert GPG/PGP keys to self-signed* X509 certificates; same for SSH keys.
* OpenPGP web-of-trust qualifies as 'self-signed' from the X509 standpoint because X509v3 can't have a multiply-rooted trust chain as far I've been able to determine.