PlanOut PHP Port Code Review

This PR should provide the project maintainers over at [PlanOut](https://github.com/facebook/planout) an easy way to review adding the proposed PHP port contained within this repository as a submodule for the original project.

Timeline for merge:
- [ ] review proposed port in this branch
- [ ] merge changes back into this repository's master branch
- [ ] update submodule checkout commit in [PlanOut PR](https://github.com/facebook/planout/pull/31) to reflect changes
- [ ] merge port as submodule into main PlanOut repository

cc @eytan for review
It seems that the NamespaceTrait includes a lot of the functionality that I associate with [the reference implementations' `SimpleNamespace`] (https://github.com/facebook/planout/blob/master/python/planout/namespace.py#L179) -- including full implementations of segment allocations that depend on a dictionary (or array) based mapping of segment allocations.  This is overly restrictive.  For something to act like a namespace, one only needs to provide the usual Experiment-like interface, and allow developers to add and remove experiments.

Part of this might be that the Python implementations'  of `Namespace`  is a little too abstract, in that it didn't implement things like `add_experiment` and `remove_experiment`, which could be expressed concretely in terms of a few well-defined high level operations.  For example, perhaps the trait implementation of add_experiment wouldn't depend on `available_segments` or `current_experiments` being dictionaries, but instead assume that there are methods for manipulating objects that represent these variables, like `getAvailableSegments()`, `getCurrentExperiments()`, `allocateSegmentToExperiment()`, and `insertExperiment()` (see original implementation at [SimpleNamespace::addExperiment()](https://github.com/facebook/planout/blob/master/python/planout/namespace.py#L116).