Switches is a distributed, eventually consistent, circuit breaker type system
for applications. It enables you to turn features on and off while they're
running without having to take them completely offline or do a complete
deploy

What follows is a novel example where two Switches instances are
synchronized via streams. Seeing how synchronization is done via streams
the same synchronization interface can be used to synchronize the instances
over TCP, HTTP, Websockets or any other transport with a streaming interface

The constructor is responsible for reveiving an object of the sane
defaults for all the switches and setting up the initial state of
the switches. The @defaults object should be a flat object where all
values are either boolean true to represent enabled or boolean false to
represent a disabled.

This function is used to enable a parameter, causing remote synchronization and
subsequent calls to Switches::isEnabled() with the same property name to
return boolean true. If the supplied property parameter is not found in
the @defaults map, it is considered to not exist, so no property will become
enabled and this function will return boolean false for failure

This function is used to disable a parameter, causing remote synchronization and
subsequent calls to Switches::isEnabled() with the same property name to
return boolean false. If the supplied property parameter is not found in
the @defaults map, it is considered to not exist, so no property will become
enabled and this function will return boolean false for failure

This function returns boolean true if the supplied property parameter is
enabled, boolean false otherwise. Also, if the property parameter can not
be found in the @defaults map, it is considered to not exist so false is
assumed