Repository: fsspec/universal_pathlib (python)

Issue:
AttributeError: _cparts
When upgrading to the new version of `universal-pathlib` I'm finding it common in my use case for tools to compare `UPath` instances to `pathlib.Path` instances and raise an `AttributeError`:

```python
import pathlib

from upath import UPath

github_path = UPath("github://fsspec:universal_pathlib@main/README.md")
local_path = pathlib.Path("README.md")

match = github_path == local_path
```

```python
  File "/Users/juftin/Library/Application Support/JetBrains/IntelliJIdea2023.2/scratches/scratch_68.py", line 8, in <module>
    match = github_path == local_path
            ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/juftin/.pyenv/versions/3.11.3/lib/python3.11/pathlib.py", line 581, in __eq__
    return self._cparts == other._cparts and self._flavour is other._flavour
                           ^^^^^^^^^^^^^
  File "/Users/juftin/git/textual-universal-directorytree/.venv/test/lib/python3.11/site-packages/upath/core.py", line 421, in __getattr__
    raise AttributeError(item)
AttributeError: _cparts. Did you mean: '_parts'?
```

I'm not exactly sure what pathlib is doing with `_cparts`, but I'm finding that implementing `_cparts` and returning `self._parts` resolves this issue. 

Pull request description:
Fix __eq__ _cparts missing
Close #202 

Patch:
diff --git a/upath/core.py b/upath/core.py
index bea2eba..ec0a575 100644
--- a/upath/core.py
+++ b/upath/core.py
@@ -516,6 +516,11 @@ class UPath(PathlibPathShim, Path):
     def _parts(self, value):
         self.__parts = value
 
+    @property
+    def _cparts(self):
+        # required for pathlib.Path.__eq__ compatibility on Python <3.12
+        return self.parts
+
     # === pathlib.PurePath ============================================
 
     def __reduce__(self):


Test patch:
diff --git a/upath/tests/test_core.py b/upath/tests/test_core.py
index d9a42d6..71a53ae 100644
--- a/upath/tests/test_core.py
+++ b/upath/tests/test_core.py
@@ -248,6 +248,13 @@ def test_copy_path_append():
     assert str(path / "folder2" / "folder3") == str(copy_path)
 
 
+def test_compare_to_pathlib_path_ne():
+    assert UPath("gcs://bucket/folder") != pathlib.Path("gcs://bucket/folder")
+    assert pathlib.Path("gcs://bucket/folder") != UPath("gcs://bucket/folder")
+    assert UPath("/bucket/folder") == pathlib.Path("/bucket/folder")
+    assert pathlib.Path("/bucket/folder") == UPath("/bucket/folder")
+
+
 @pytest.mark.parametrize(
     "urlpath",
     [