## Description
This is the second part of Garbage Collection which implements the
following ticked next steps as outlined on the previous PR
- [x] BlockManager to respect the gc_round when accepting blocks and
trigger clean ups for new gc rounds
- [x] Skip blocks that are received which are <= gc_round
- [x] Not propose ancestors that are <= gc_round
- [x] Subscriber to ask for blocks from `gc_round` when
`last_fetched_round < gc_round` for a peer to prevent us from fetching
unnecessary blocks
Next steps:
- [ ] Re-propose GC'ed transactions (probably not all of them)
- [ ] Implement new timestamp approach so ancestor verification is not
needed
- [ ] Harden testing for GC & edge cases
## Test plan
CI/PT
---
## Release notes
Check each box that your changes affect. If none of the boxes relate to
your changes, release notes aren't required.
For each box you select, include information after the relevant heading
that describes the impact of your changes that a user might notice and
any actions they must take to implement updates.
- [ ] Protocol:
- [ ] Nodes (Validators and Full nodes):
- [ ] Indexer:
- [ ] JSON-RPC:
- [ ] GraphQL:
- [ ] CLI:
- [ ] Rust SDK:
- [ ] REST API: