C++ bindings for Rust pointer and reference types

Rust bindings for lifetime-annotated C++ pointers look as follows:

Rust APIC++ bindings
*const Tconst T*
*mut TT*

When used as function parameter types or function return types, Rust references map into the corresponding C++ types as follows:

Rust APIC++ bindings
&'a Tconst std::int32_t & [[clang::annotate_type("lifetime", "a")]]
&'a mut Tstd::int32_t & [[clang::annotate_type("lifetime", "a")]]
&strTODO(b/262580415): Not supported yet.
&mut strTODO(b/262580415): Not supported yet.
&[T]TODO(b/271016831): Not supported yet.
&mut[T]TODO(b/271016831): Not supported yet.

TODO(b/286299326): Use shorter $a syntax in the generated C++.

TODO(b/279913786): Generate ABSL_ATTRIBUTE_LIFETIME_BOUND when appropriate.

TODO(b/286256327): Support Rust references in fields and nested types.