C-based encoders/decoders.

Somewhat naive C implementation. The benchmarks are misleading since
the memorying being encoded is zerod which will always hit the early
return branching on the gf math routines. Modern processors are pretty
good at branch prediction too.

The C involved is dangerous and does little to avoid segfaulting. Use
very wisely.

There are a slew of optimizations that could get be done. The
underlying datatype of the matrix could be left up to the compiler
which might speed up the constant access to the matrix. In addition,
using a wider datatype could allow a large exp table (anti-log) which
would allow the 0 test to be removed, which as noted won't improve
performance due to branch prediction, but could allow the matrix to be
transformed into a log matrix (which isn't possible without addressing
0 values) which would remove a lookup from the gf_mul routine (called
for every single byte in memory).

There is no point in using more efficient matrix operations. They are
harder to understand, and a matrix is only solved after initialization
once per block decode.

BenchmarkCEncodeBlock	       5			  405801655 ns/op
BenchmarkEncodeBlock				        1  8249662220 ns/op