Add custom password reset form accepting username

The contrib.auth password reset workflow is hard coded to only accept an email address, so I had to reimplement the view logic in addition to tweaking the form.

Fixes #168