Refactor: `LifetimeName` is `Name`; use `name`, not `ident`, for such fields.

After PR #12451 landed, lifetimes carry a `Name` instead of an
`Ident`.  But that PR did not change the field names in `ast.rs` to
`name` instead of the prevous `ident`.  This impedes hacking on the
code, since you are using `foo.ident` in a content expecting a `Name`
half the time.

We may or may not revert PR #12451 in the future (for unrelated
reasons).  But in the mean time, here are two changes to ease working
with the existing code:

  * Adding the `ast::LifetimeName` alias eases swapping in a newtype
    struct when hacking, or changing the alias to `Ident` in the
    future.

  * Renaming the `ident` fields of type `LifetimeName` to be `name`
    instead makes the code look much saner.
Proper support for Early/Late bound distinction for lifetime parameters.
Simplify resolve_lifetime, in part via newly added OptVec::partition method.

Cleanup documentation to free_lifetimes slightly.