This is the most different due to segwit (the rest of the messages are simple). I still need to simplify/refactor the tests, they're "messy".