Improve client params

This PR does two things:

1. Adds a `hidden_params` field for Assignment and Test objects. This functions similar to the `hidden` field for TestCases -- staff members can use `hidden_params` for staff autograding. The `LockProtocol` will remove `hidden_params` so that students cannot see them.
2. Implements proper `cache` for DoctestCase. The `cache` for Assignments and Tests are lazily evaluated now.
Not sure that it matters, but an actual console transcript would have a blank line after return.

    >>> def square(x):
    ...     return x * x
    ...
    >>> square(x)