Fix soundness hole in struct with expressions.

Fixes #18567. Struct{x:foo, .. with_expr} did not walk with_expr, which allowed
using moved variables in some cases.  The CFG for structs also built up with
with_expr happening before the fields, which is now reversed. (Fields are now
before the with_expr in the CFG)
Implement Index/IndexMut for [T]

Closes #16529
libs: add Deref, DerefMut impls for references, fixing a bug in compiler in the process that was blocking this.

Fixes #18621.
auto merge of #18672 : brandonson/rust/functional-update-walk, r=nikomatsakis

Fixes #18567. `Struct{x:foo, .. with_expr}` did not walk `with_expr`, which allowed
using moved variables in some cases.  The CFG for structs also built up with
`with_expr` happening before the fields, which is now reversed. (Fields are now
before the `with_expr` in the CFG)
auto merge of #18698 : japaric/rust/index, r=alexcrichton

Closes #16529

r? @aturon
auto merge of #18714 : nikomatsakis/rust/issue-18621-deref-for-refs, r=aturon

libs: add Deref, DerefMut impls for references, fixing a bug in compiler in the process that was blocking this.

r? @aturon