TR: better keyword errors

Produces better errors when arities don't match up for a keyword function definition. I plan to make an equivalent change for optional argument functions too later.
Hmm, yes, I think you're right. There may have been a reason I didn't do it that way but I can't remember. How about I investigate that in a separate PR? (partly because refactoring how `lambda` is parsed doesn't really belong in this commit)