0.1.0

  Initial placeholder version.

0.1.2

  Add structs implementing GaloisField and constructors.

  Add README.md and unit tests.

0.1.3

  Add vector operations (no unit testing yet).

  Refine documentation.

0.1.4

  Add new guff::good module, to contain "reasonable" set of optimised
  maths implementations.

  Add optimised GF(2**4) implementation for field poly 0x13 there,
  backed by two generic lookup table types (for inv and mul).

  Fix bug in default implementation when calculating inverses in
  GF(2**4).

  Clean bill of clippy health.

0.1.5

  Start using Criterion for benchmarking.

  Benchmark guff::good GF(16) fields versus reference.

  Add good GF(2**8) implementation (+test/benchmark)

  Warning about exp not being used is OK (access via exp_entry).

  Surprisingly, log/exp implementation is not faster than reference.

0.1.6

  Document last run of benchmarks.

  Add inv() method for good GF(2**8) (fixing a couple of bugs)

  Add pow() method for good GF(2**8) (finding bug in reference pow)

  Minor documentation fixes.

  More benchmarking for new inv/pow methods.

0.1.7

  Change field.mull() to Field::mull() since it doesn't depend on poly

  For u16, u32 fields, need a new approach, since tables are too big:

  * long multiplication on polynomial fragments 

  * bytewise modular reduction / modular shift (linear shift feedback
    register)

  Implement static (8k) MULL (long multiplication) table

  Implement generic bytewise modular reduction table wrt poly

  Implement u16 0x1002b field:

  * inv via full table lookup

  * mul via MULL plus field-specific modular reduction table

  Benchmark new field, document same.
