Extract Language.find_by_extension

This doesn't change any behavior, but just exposes a public method for `Language.find_by_extension`.

/cc @aroben #1675
I've been wondering that too. I'm trying to think of a case where the ambiguity would be bad, but haven't come up with one yet.