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))