Make lifetime elision help more useful on type signatures.

Fixes #19707.

In terms of output, it currently uses the form `argument #1`, `argument #2`, etc. If anyone has any better suggestions I would be glad to consider them.
It would be more idiomatic Rust to re-assign to name and make it immutable (i.e., remove `mut` and add `let name = ...`