* Avoid fetching contracts while creating a checkpoint
* Use enum for state kind and cache ipld status
* Avoid fetching block twice while finalizing a staged diff IPLDBlock
* Create checkpoints at fixed block numbers and refactor checkpointing code
* Avoid calling block handler until start block is reached
* Use delete while finalizing staged diff IPLDBlocks
* Add a check to ensure hooks job is created only once
* Avoid check for initial state while creating a checkpoint
* Process hooks for the first block in the watchers
* Store initial state from a hook in an IPLDBlock for eden-watcher
* Extract watcher method to prepare IPLDBlocks in util
* Extract common IPLDBlocks related code in util
* Move IPFSClient to util
* Use constants for state kind
* Invoke handlers based on watcher-ts events
* Read subgraph yaml and listen to events from watcher-ts
* Create GraphWatcher class to use in generated example contract watcher
* Call graph-node event handler from generated watcher