Tests emit many warnings with Python 3.10
**Expected behavior**
Some users will expect the tests to run with no warnings. Requiring them to run with minimal warnings can help the project stay on top of dependency changes and Python language changes.

**Actual behavior (describe the problem)**
With Python 3.10 the tests emit many Python warnings. For example `nox -s test -p 3.10` prints this:

```
=============================================== warnings summary ================================================
tests/integration/test_data_api.py: 46 warnings
tests/integration/test_data_cli.py: 41 warnings
tests/integration/test_orders_api.py: 45 warnings
tests/integration/test_subscriptions_api.py: 14 warnings
tests/unit/test_cli_session.py: 3 warnings
tests/unit/test_http.py: 9 warnings
tests/unit/test_io.py: 2 warnings
tests/unit/test_models.py: 5 warnings
tests/unit/test_session.py: 4 warnings
  /home/seangillies/projects/planet-client-python/.nox/test-3-10/lib/python3.10/site-packages/pytest_asyncio/plugin.py:95: DeprecationWarning: There is no current event loop
    old_loop = policy.get_event_loop()

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
======================================= 494 passed, 169 warnings in 2.99s =======================================
```

We can see more about the warnings if we turn them into errors like `nox -s test -p 3.10 -- -We -k test_data_api`. Most of them are like this:

```
_______________________ ERROR at setup of test_validate_checksum[True-False-expectation2] ________________________

fixturedef = <FixtureDef argname='event_loop' scope='function' baseid=''>
request = <SubRequest 'event_loop' for <Function test_validate_checksum[True-False-expectation2]>>

    @pytest.hookimpl(hookwrapper=True)
    def pytest_fixture_setup(fixturedef, request):
        """Adjust the event loop policy when an event loop is produced."""
        if fixturedef.argname == "event_loop":
            outcome = yield
            loop = outcome.get_result()
            policy = asyncio.get_event_loop_policy()
            try:
>               old_loop = policy.get_event_loop()

.nox/test-3-10/lib/python3.10/site-packages/pytest_asyncio/plugin.py:95: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <asyncio.unix_events._UnixDefaultEventLoopPolicy object at 0x7f3cbc62ceb0>

    def get_event_loop(self):
        """Get the event loop for the current context.
    
        Returns an instance of EventLoop or raises an exception.
        """
        if (self._local._loop is None and
                not self._local._set_called and
                threading.current_thread() is threading.main_thread()):
            stacklevel = 2
            try:
                f = sys._getframe(1)
            except AttributeError:
                pass
            else:
                while f:
                    module = f.f_globals.get('__name__')
                    if not (module == 'asyncio' or module.startswith('asyncio.')):
                        break
                    f = f.f_back
                    stacklevel += 1
            import warnings
>           warnings.warn('There is no current event loop',
                          DeprecationWarning, stacklevel=stacklevel)
E           DeprecationWarning: There is no current event loop

../../miniconda3/lib/python3.10/asyncio/events.py:666: DeprecationWarning
```

I suspect that we need to upgrade our version of pytest-asyncio, it looks like it's using a deprecated feature. We've pinned the project to 0.16, which is 1.5 years old. The latest is 0.21.
diff --git a/CHANGES.txt b/CHANGES.txt
index 6ec63b9..fd17000 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,9 +1,21 @@
+2.0.0-rc.3 (TBD)
+
+Changed:
+- Session class unit tests are marked to be run within an event loop and are
+  no longer skipped (#881).
+
 2.0.0-rc.2 (2023-03-15)
 
 Added:
 - The Session class can now construct clients by name with its client method
   (#858).
+
+Changed:
 - Updated product bundle spec to 2/24/23 version.
+- `planet.subscription_request.catalog_source` and 
+  `planet subscriptions source-catalog` now simplify geojson given in
+  `geometry` parameter/option to just the geometry, the form required by the
+   subscriptions api (#880).
 
 
 2.0.0-rc.1 (2023-03-06)
diff --git a/tests/unit/test_session.py b/tests/unit/test_session.py
index 5520dfd..ed631bd 100644
--- a/tests/unit/test_session.py
+++ b/tests/unit/test_session.py
@@ -6,6 +6,7 @@ from planet import DataClient, OrdersClient, SubscriptionsClient, Session
 from planet.exceptions import ClientError
 
 
+@pytest.mark.asyncio
 @pytest.mark.parametrize("client_name,client_class",
                          [('data', DataClient), ('orders', OrdersClient),
                           ('subscriptions', SubscriptionsClient)])
@@ -16,6 +17,7 @@ async def test_session_get_client(client_name, client_class):
         assert isinstance(client, client_class)
 
 
+@pytest.mark.asyncio
 async def test_session_get_client_error():
     """Get an exception when no such client exists."""
     async with Session() as session:
['tests/unit/test_session.py', 'CHANGES.txt']