Track kind of closure in upvar categorization

Keep track of the kind of closure responsible for an upvar
Categorize upvars in `Fn` unboxed closures as freely aliasable

This causes borrowck to correctly reject mutation or mutable borrows
of upvars in `Fn` unboxed closures since the closure environment is
aliasable.

This also tracks the responsible closure in the aliasability
information returned and uses it to give a helpful diagnostic.

Closes issue #17780
Fix unit test that was illegally mutating an upvar
Add regression test for issue #17780
Re-exports core::str::Utf16CodeUnits in std::str

Closes #17751
Guide: Fix inconsistency in 'Marcos' section

The old version switched in between examples from the value `5i` to `"Hello"`
and back. Additionally, the code generated by `rustc print.rs
--pretty=expanded` is not as verbose anymore.
Rename RELEASES.txt to RELEASES.md. It's markdown.
Update RELEASES.md for 0.12.0
Update AUTHORS.txt for 0.12.0
Update per feedback
Update html_root_url for 0.12.0 release
Fix keyword table

Markdown tables require a header, and we don't want one.

Fixes #17528
More relnotes tweaks
Add `abstract`, `final`, and `override` to reserved keywords
Fix unclear macros documentation.
Remove use of `final` and `override` (now reserved)
Add `abstract`, `final`, and `override` to rust.vim keyword list
Add tests for new reserved keywords `abstract`,`final`,`override`
auto merge of #17840 : Sawyer47/rust/issue-17751, r=huonw

Closes #17751
debuginfo: Add LLDB version handling to test infrastructure.