Rename to Hack::Natas; Refactor; use Moo

Renamed to Hack::Natas, to give a better idea of the purpose
of this code.

There is some common structure to the code for levels 15 and
16, and this will probably continue for subsequent levels, so
I have tried to refactor in a way that will be flexible enough
to accomodate future levels. We're now using Moo for OO, and
Type::Tiny for simple type constraints.

We should probably use the abstract factory pattern or something,
but that seemed a bit much for right now -- maybe later.
Released 0.002