Checking in a working CRC16 implementation (all of the code is in the test. Refactoring time