knight move gen

dead simple, because it's mostly copypasta from king move gen. i assume
the same will be true of the sliding pieces. i'm tempted to start
refactoring but i will probably hold off until i can start on
make/unmake while i'm writing perft. i assume all these one-off vecs and
such are not _actually_ what i'm going to want.

and of course, most of this code will end up gutted anyhow, because i
should actually just be using pre-generated lookup tables for bitmasks,
which would presumably speed this up quite a bit. but without any way to
meaningfully benchmark things, i shouldn't get sidetracked by all of
that yet.