Rust changes for v6.5

A fairly small one in terms of feature additions. Most of the changes in
terms of lines come from the upgrade to the new version of the toolchain
(which in turn is big due to the vendored 'alloc' crate).

 - Upgrade to Rust 1.68.2:

   This is the first such upgrade, and we will try to update it often
   from now on, in order to remain close to the latest release, until
   a minimum version (which is "in the future") can be established.

   The upgrade brings the stabilization of 4 features we used (and 2
   more that we used in our old 'rust' branch).

   Commit 3ed03f4da06e ("rust: upgrade to Rust 1.68.2") contains the
   details and rationale.

 - pin-init API:

   Several internal improvements and fixes to the pin-init API, e.g.
   allowing to use 'Self' in a struct definition with '#[pin_data]'.

 - 'error'  module:

   New 'name()' method for the 'Error' type (with 'errname()'
   integration), used to implement the 'Debug' trait for 'Error'.

   Add error codes from 'include/linux/errno.h' to the list of Rust
   'Error' constants.

   Allow specifying error type on the 'Result' type (with the default
   still being our usual 'Error' type).

 - 'str' module:

   'TryFrom' implementation for 'CStr', and new 'to_cstring()' method
   based on it.

 - 'sync' module:

   Implement 'AsRef' trait for 'Arc', allowing to use 'Arc' in code that
   is generic over smart pointer types.

   Add 'ptr_eq' method to 'Arc' for easier, less error prone comparison
   between two 'Arc' pointers.

   Reword the 'Send' safety comment for 'Arc', and avoid referencing it
   from the 'Sync' one.

 - 'task' module:

   Implement 'Send' marker for 'Task'.

 - 'types' module:

   Implement 'Send' and 'Sync' markers for 'ARef<T>' when 'T' is
   'AlwaysRefCounted', 'Send' and 'Sync'.

 - Other changes:

   Documentation improvements and '.gitattributes' change to start
   using the Rust diff driver.