[block_server] Support hierarchical Mapper sessions

Implement hierarchical Mapper session serving:
- Document in `block.fidl` that child sessions close when the parent
  session is closed.
- Handle `MapperSession.OpenChildSession` requests by resolving the
  parent file from the parent session and wrapping it in a
  `ChildBlockService`.
- Support recursive intermediate and leaf mapper sessions in
  `serve_mapper_session` and `run_mapper_session_loop`.
- Cancel and terminate child sessions when a parent session closes.
- Add unit tests verifying reading from a child session and verifying
  that closing a parent session closes all child sessions.

TAG=agy
CONV=15d9c16d-cf1f-46b6-8b2f-9bff972c91f1

Bug: 530494057
Change-Id: I29139a99c1fae7bad354704dd86498388d94be6a
Reviewed-on: https://fuchsia-review.googlesource.com/c/fuchsia/+/1768136
API-Review: Chris Suter <csuter@google.com>
Reviewed-by: Rui Qi Sim <rqsim@google.com>
Commit-Queue: Chris Suter <csuter@google.com>
Fuchsia-Auto-Submit: Chris Suter <csuter@google.com>
4 files changed