Split locations models.py

models.py is too large to work with easily, so split into several files.
Most models get a file, with some similar models grouped together in the
same file. __init__.py used to maintain the same import structure.

Also fixed pep8 whitespace issues, and reordered protocol spaces
alphabetically.
Add DisableableSelectWidget

Add custom widget that allows specific values in a Select widget to be
disabled.
Restrict Location purposes based on Space's protocol

refs #6939

Add ALLOWED_LOCATION_PURPOSE to each protocol Space with a whitelist of
what Location's purposes are allowed in that Space.  To enforce this,
disabled invalid purpose in the purpose dropdown of the LocationForm, and
enforce it in clean_purpose.