Adds Gate Flag

Adds the concept of gate flags. Gates work almost like levers in which
they are either locked or unlocked. When a gate is tested, an optional
argument is passed to the test method. If the gate is locked, the test
will return a boolean value of the passed in argument. If the gate is
unlocked, the test will always return true.

One prossible use of the gate flag is to lock down permissions to only
users with a specific permission while the feature is being tested and
then to open it up to the general public by unlocking the gate.

Adds related unit tests and documentation.