Synchronizing all events to better handle epoch change

Following are the events to be synchronized:
- [x] epoch change
- [x] meta (from parent or child) change
- [x] data request to send
- [x] data request received
- [x] data response to send
- [x] data response received

As a next step on this work, it needs:
1. send http response back for epoch discrepancy.

Once that's finished, we can do random failure test on Task#ChildDataReady.
Do you have any suggestion?
I don't mind any change to make the code look better.
Otherwise I will focus on fixing the standby and http response for epoch discrepancy.