Refactored encoding to be a module constant as we'll need it elsewhere
Make sure ACROSSDOWN is provided as a bytes object
Reading a string means searching until '\0' as bytes indicating string termination
Only make use of str/unicode and range/xrange as they are available in that Python version
Make sure we always pass bytes objects to the data_cksum function
Use old-style division when computing row in grid
Fixed AttributeError as this constant is no longer available; use ascii_uppercase instead
Fixed shuffle function to use old-style division and the functools.reduce function
Use next function instead of assuming that t has next method
Store fill and solution as bytes and perform encode/decode where needed