add StartBlockResolver interface and ParallelResolveStartBlock(..., resolvers) helper
A StartBlockResolver helps determine what is the lowest block that you have to fetch from your block source to ensure that you can handle forks for a given target start block (ex: I want to start at block 1000 and I may have to start at block 700 if I don't have knowledge of which block 1000 is "irreversible")
Ex:
the DumbStartBlockResolver may simply tell you to start at block 500 and be done with it.
a StartBlockResolver based on more data could tell you that you can start at block 1000 but that you need to set the irreversible ID to "00001000deadbeef" in your forkable (Inclusive) so that you don't start on a forked block that can't be resolved
a startBlockResolver based on a blocksource for EOSIO could fetch the "dposLIBNum" of your targetStartBlock, and tell you to start at that block (ex: 727)
add StartBlockResolver interface and ParallelResolveStartBlock(..., resolvers) helper
A StartBlockResolver helps determine what is the lowest block that you have to fetch from your block source to ensure that you can handle forks for a given target start block (ex: I want to start at block 1000 and I may have to start at block 700 if I don't have knowledge of which block 1000 is "irreversible")
Ex: