This is a variation of my earlier PR #2 with the main difference being that I didn't bother changing most of the constants in cryptonote_config.h such as CURRENT_TRANSACTION_VERSION and CRYPTONOTE_BLOCK_GRANTED_FULL_REWARD_ZONE_V2 in favor of even smaller changes. The main benefit of this is that the existing tests pass without much changes. Except that I observe a strange RingCT verification failure on core tests, which I'm investigating now. EDIT: Fixed now. All the tests pass.
The main changes regarding the hardfork is condensed into a single commit 21c2492 while the rest are more compact and self-contained.
Also, testnet is supported with two seed nodes I've set up (22.214.171.124:21180 & 126.96.36.199:21180).
Because the way Aeon did the 592000 hardfork was quite different from how Monero handles hardforks, I made the following compromise: the 592000 hardfork is still seen as running on the same network version 1, but the difficulty target changes after the height 592000. This means that the testnet chain also needs to follow the same path as the main chain with the same hardfork at the height 592000. EDIT: This isn't necessarily the case; the switch to the 240s diff target gets triggered either when the protocol version is incremented to v2 or the block height reaches 592000.
Going forward, we should adopt the more flexible hardfork mechanism of Monero.