UpCast trait in an OOPS (Object Oriented Programming Support) module.

This fleshes out the type conversions: instead of just `&` -> `&`, we can upcast as:

* `*const` -> `*const` (via unsafe trait)
* `*mut` -> `*mut` (via unsafe trait)
* `&` -> `&`
* `Pin<&mut>` -> `Pin<&mut>`
* `&mut` -> `Pin<&mut>` (if derived is unpin)
* `&mut` -> `&mut` (if derived and base are unpin)

Not supported: `&mut` (and variations thereof) -> `&`. It's possible to implement these, but they would mutably borrow instead of reborrowing as immutable, so it isn't very useful and might be more confusing than leaving them unimplemented.

(The alternative design to this would be to give explicitly named casts for each of these: one function per receiver/cast-target pair. This is a lot of functions, though it would make it easy enough to cast to a & when you gold a &mut.)

Surprisingly, the error messages seem pretty good so far. For example:

```
error[E0277]: `test::test_nonunpin_upcast::Base` cannot be unpinned
   --> third_party/crubit/rs_bindings_from_cc/support/oops.rs:198:43
    |
198 |         let _: &mut Base = (&mut derived).up_cast(); // does not compile
    |                                           ^^^^^^^ the trait `Unpin` is not implemented for `test::test_nonunpin_upcast::Base`
    |
    = note: consider using `Box::pin`
    = help: the following other types implement trait `UpCast<Target>`:
              <&'a Derived as UpCast<&'a Base>>
              <&'a mut Derived as UpCast<&'a mut Base>>
              <&'a mut Derived as UpCast<std::pin::Pin<&'a mut Base>>>
              <*const Derived as UpCast<*const Base>>
              <*mut Derived as UpCast<*mut Base>>
              <std::pin::Pin<&'a mut Derived> as UpCast<std::pin::Pin<&'a mut Base>>>
```

P.S. yes I am very happy with this module name and think it is a great idea. Please let me keep it.

PiperOrigin-RevId: 446143927
diff --git a/rs_bindings_from_cc/support/BUILD b/rs_bindings_from_cc/support/BUILD
index a3946cc..b0d9239 100644
--- a/rs_bindings_from_cc/support/BUILD
+++ b/rs_bindings_from_cc/support/BUILD
@@ -91,3 +91,16 @@
     srcs = ["forward_declare_macros_test.rs"],
     deps = [":forward_declare"],
 )
+
+rust_library(
+    name = "oops",
+    srcs = ["oops.rs"],
+    visibility = [
+        "//third_party/crubit:__subpackages__",
+    ],
+)
+
+rust_test(
+    name = "oops_test",
+    srcs = ["oops.rs"],
+)