cleanup `MemoryRef` (#54647)
While writing docs in https://github.com/JuliaLang/julia/pull/54642, I
became dis-satisfied with how `MemoryRef` currently works and since we
are approaching the deadline for changing things around here, made this.
Previously, we had the builtin `memoryref` which constructed a
`GenericMemoryRef` from a `GenericMemory` or from a `GenericMemoryRef`
and an offset. and then we defined constructors `GenericMemoryRef`,
`MemoryRef` etc that provided a nicish interface around the intrinsic.
The problem with this is that people who want to make a
`GenericMemoryRef` don't care what kind of `GenericMemoryRef` they are
making. That choice is defined by the `GemericMemory`. As such, I have
switched it around so that now the intrinsic is named `memoryrefnew`
which frees up `memoryref` to be the function that constructs the
appropriate type of `GenericMemoryRef`.
This could have been done purely on the Base side, but renaming the
intrinsic seems worth it to me since Base/Core use the (new) `memoryref`
a lot and it seems like we should make the experience the same for
internal and external users rather than making `Base` have to work
around a bad name.