Make difficulty calculation more accurate

It's not really 0xffffff that's being grabbed, but rather 0x7fffff, though bits higher than that shouldn't be used. Also, there's the possibility for the number to be negative, but currently difficulty would never be negative.
Move "isAuxPOW" logic to separate function.

Makes code easier to read, since "if (this.isAuxPow())" clearly shows the intent of the flag checking, rather than all the bitwise operators.
Forgot the coinbase transaction
MerkleLink will need access to it's parent "superblock" to verify
Consistent naming convention with other Serialize functions
Start adding AuxPOW verification checks