feat(core,chain): introduce `CanonicalizationTask` and `ChainQuery`
It introduces the new `CanonicalizationTask` that's implements the
canonicalization algorithm through a request/response pattern.
Also, it introduces the new `ChainQuery` trait in `bdk_core`, which
provides an interface for blockchain source/oracle query-based operations.
Allowing sans-IO patterns for algorithm that needs a blockchain oracle,
without the need for directly implement/handle I/O.
Adds new API methods into `LocalChain`: `canonicalize` and `canonical_view`,
adding same features as the existing `CanonicalIter` and it's APIs.