Add form-wide validation to `LendForm`

Checks are now in place to ensure that `due_out`, `due_back`, `out` and `back`
have sane values.
Update factories and form tests

Make LendFactory abstract and create two concrete subclasses: PastLendFactory
and FutureLendFactory. LendFactory provides values for 'user_id' and 'item_id'
fields, and the subsclasses provide a value for 'out' and 'due_out',
respectively. This change makes it easier to test the validation rules in class
``LendForm``, which say that a ``Lend`` object must have its user_id, item_id
and (out OR due_out) attributes populated.

Use these new factories in test_forms.py.
Improve tests for lend views

Several Lend<X>TestCase classes have been rewritten to incorporate better tests.
This means two things:

1. The new ``random_lend_factory()`` function is used by several test cases when
   generating LendObjects.
2. The new ``http_dict`` method (on the Lend class) is used to encode a Lend
   object's attributes as a dict.

Also, several FIXMEs have been added to ``factories.py``.
Improve the `factories` module

Normally, a Factory determines what all of it's field's values are when the
class is declared, but fields that are populated by the FuzzyAttribute class
have their values computed every single time an instance is generated. The
FuzzyAttribute class is now used agressively for this very purpose.

Rewrite the docstring for the `factories` module. Rewrite the docstring and add
a doctest for the `random_lend_factory` function. Improve commenting in the
`create_user` function.

The `random_utf8_str` function wasn't being used to it's full potential in
several locations. For example, this:

    name = random_utf8_str(models.Item.MAX_LEN_NAME)

Has been replaced with this:

    name = FuzzyAttribute(lambda: random_utf8_str(1, models.Item.MAX_LEN_NAME))
Add hack to compensate for bad date/time handling

From the code:

    Using random data for dates and datetimes can produce exceptions. A proper
    solution is not known at this time, and it is hard to consistently produce
    this error. In the meantime, a simple hack is used: set the lower and upper
    bound for dates to year 1900 and 2100, respectively. This is not as ideal as
    using a value like date.min.year, but it should provide a good enough range
    of test values while still avoiding random exceptions.