### Changed

 - turn `prepare_ls_refs` in `fetch::refs()` into `FnOnce`.

### New Features

 - Allow defaulting `fetch::handshake::Outcome`.
   This is useful in conjunction with `std::mem::take()`.
 - `fetch::Arguments::is_empty()` to help decide if arguments should be sent at all.
   Furthermore, the `Debug` trait was added.
 - make some private methods public to give callers more flexibility.
   This allows to implement the fetch-negotiation part oneself and break
   free from constraints of the delegate.
 - add `client::fetch_pack()` allowing to fetch a pack after a handshake.

### Bug Fixes

 - support keepalive packets.
   Keepalive packets are side-band only empty datalines that should
   just be ignored. This is now happening, allowing longer git
   operations to work as they will send keepalive packets every 5 seconds,
   and previously we would choke on it.
   
   Note that empty datalines are never send otherwise, making it a
   previously unused marker that can safely be skipped.
 - Link up Io error as source for error chaining; add `Debug` to `client::fetch::Response`

### Reverted

 - `client::fetch_pack()` isn't worth it after all.
   The overhead required to make it work isn't worth the logic we are
   enabling. Instead, it's OK to re-implement custom logic on the consumer
   side based on this one.

### Commit Statistics

 - 20 commits contributed to the release over the course of 20 calendar days.
 - 20 days passed between releases.
 - 8 commits were understood as [conventional](https://www.conventionalcommits.org).
 - 1 unique issue was worked on: #450

### Commit Details

 * **#450**
    - support keepalive packets. (d7f62b4)
    - properly implement `fetch::Arguments::is_empty()` (df36ede)
    - Link up Io error as source for error chaining; add `Debug` to `client::fetch::Response` (266395e)
    - Allow defaulting `fetch::handshake::Outcome`. (aed93d2)
    - `fetch::Arguments::is_empty()` to help decide if arguments should be sent at all. (0bcb2fd)
    - make some private methods public to give callers more flexibility. (31a7089)
    - Use `&dyn Any` instead of unspecified serialization format, as it's the right way. (779eefe)
    - adapt to changes in `git-transport` (e842843)
    - `client::fetch_pack()` isn't worth it after all. (f87b7eb)
    - add `client::fetch_pack()` allowing to fetch a pack after a handshake. (744ed03)
    - refactor (c3e4b2a)
    - update fetch feature list with `wait-for-done` (02245a6)
    - turn `prepare_ls_refs` in `fetch::refs()` into `FnOnce`. (3a38d1b)
    - improve docs a little (45394d5)
 * **Uncategorized**
    - prepare changelogs for release (d232567)
    - Merge branch 'main' into new-http-impl (702a161)
    - Merge branch 'fetch-pack' (f47c891)
    - Merge branch 'fetch-pack' (3c49400)
    - Merge branch 'fix-git-features' (82fd251)
    - Merge branch 'diff' (25a7726)