public.py: add type checking and tests for Box

Several pre-existing tests were calling Box() with arguments in the
wrong order, which was ignored before but is now caught, so those tests
were updated. Also new tests were added.

The odd double-parenthesis in Box.__init__ is the best way I could find
to appease flake8. The most natural expression (using just one set of
parenthesis) provokes a warning about two lines visually lining up, and
the split error message was necessary to keep the line below 79 columns.
signing.py: add type checking and tests for SigningKey/VerifyKey

refs #43
secret.py: add type checking and tests for SecretBox