Refactor location definition.

Allows you to retrieve locations by name after they're defined, which
makes manipulating them a lot simpler. Some small Scene refactors as
well to support scenes having arbitrary fields, including "location"
fields.