Add optional crc parameter to allow updating of an existing CRC

Signed-off-by: John Else <john.else@citrix.com>
Add tests for CRC update functionality

Signed-off-by: John Else <john.else@citrix.com>
Define some new exceptions to throw when dealing with invalid arguments

Signed-off-by: John Else <john.else@citrix.com>