QuickCheck testing

This pull request sets up a framework for writing and running quickcheck properties, as well as basic testing for several protocols. It also contains three bug fixes:

* IP - The ident field was not being properly marshalled, and in fact were never used. In its place, the code wrote the tos byte
* IP - The code flipped the order of the flags and fragment offset bits marshalling.
* TCP - The NS flag is in a different byte than the rest of the flags. In particular it's in the same byte as the data offset. If it was ever set in an incoming packet, that flag would be dropped by the shift of the offset byte.