C++ bindings for Rust function pointer types

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

RustC++
extern "C" fn(i32)std::type_identity_t<void(int32_t)>&
Option<extern "C" fn(i32)>Not supported

In other scenarios Rust function pointer types map into the corresponding C++ types as follows:

RustC++
extern "C" fn(i32)std::type_identity_t<void(int32_t)>*
Option<extern "C" fn(i32)>Not supported

TODO: Link to the not-yet-written references.md with a longer explanation why Rust references are sometimes bound to C++ references and sometimes to C++ pointers (C++ references can only be bound once; C++ temporaries).