Don’t rely on block height for measuring time

This is a big change that comes from the fact that time between blocks
is not enforced by consensus in Tendermint. Besides making data
structures more natural and the usage simpler, it allows to abandon
creating blocks every n seconds regardless of whether there are
transactions present or not. For this to be possible, Tendermint needs
to stop creating blocks when the application hash changes. See
https://github.com/tendermint/tendermint/issues/1909 for details.
A testnet generator is introduced to faciliate generating of initial
data, which is now highly dependent on time.
A module which encompasses epoch-specific logic has been created.