Edition::LimitedAccess now understands the world location scoping

If the user is a location limited user then accessible_to and accessible_by? will respect that location limited users can't see things that aren't in their locations.
Tidy up how enforcer finds the correct ruleset

In response to comments from @heathd and @tekin.
Use symbols instead of strings in rules

In response to comments from @tekin.
Use exceptions and rescue_from in controllers

We raise PermissionDenied if the current_user fails the enforce_permission! check, we raise InvalidAction if the controller can't work out which controller action => rules action conversion to make.