Provide default implementations in gf127 package and all optimizations in subpackages. This way it will be easier to use from a client.
Cache results of the shift. Also add test for checking if implementation can work when result is one of the arguments.