Moved permissions into its own namespace

Also changed interfaces to abstract classes to provide a default
implementation of HasPermision() methods.