Split out a BasePermission from Permission.

- Have this class contain all the basic methods we need currently that
  are still needed by the Permission class.
Allow Permission class to know the error code
Better id manager

- Can't just test one role...
Implement the bitwise ``or`` of permissions

- Allows the creation of permission objects that check for any of the
  nested permissions.
Implement the bitwise ``and`` of permissions

- Have the ``AndPermission`` similar to the ``OrPermission``.