added set_access! to castle instance methods

In contrast to grant_access one will remove all gates set so far and not apply defaults.

little bit of refactoring
no callbacks from set_access! - added WARNING

This is a lower level function than the grant and revoke ones. This is meant to be used in migrations from other permission systems.
use the new set_access!

This way defaults will not be added and callbacks will not be run.

We take care of a consistent migration ourselves.