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
Awesome! I think all of these are great ideas and I really like the idea of abstracting away some of the behavior (while reserving the dictionary implementation for the SimpleNamespace). Here's a potential re-organization I'm thinking of making if you agree it makes sense:

Experiments
- `AbstractExperimentTrait` (behavior shared by default and normal experiments, no change)
- `DefaultExperiment` uses `AbstractExperimentTrait`, no change
- `ExperimentTrait` uses `AbstractExperimentTrait` and introduces PSR logging, no change
- NEW `SimpleExperimentTrait` uses `ExperimentTrait` and logs to a file as in the Python version
- `SimpleExperiment` is the class version of `SimpleExperiment`

Namespaces
- `AbstractNamespaceTrait` provides the template namespaces must follow, including methods like `allocateSegmentToExperiment()` and `getAvailableSegments()`
- `NamespaceTrait` uses `AbstractNamespaceTrait` and implements methods like `add_experiment` and `remove_experiment` in terms of the high level operations like `allocateSegmentToExperiment()`
- NEW `SimpleNamespaceTrait` uses `NamespaceTrait` and implements the `allocateSegmentToExperiment()` etc. operations using dictionaries as the Python `SimpleNamespace` currently does
- `SimpleNamespace` is the class version of `SimpleNamespaceTrait`

When porting PlanOut we found it important to use the majority of Experiment and Namespaces as traits for higher flexibility as compared to classes, but I still liked the idea of including pure class versions to better mirror the Python implementation.

Reorganizing as above should allow developers to either continue using the dictionary implementation (`SimpleNamespaceTrait` / `SimpleNamespace`), or extend `NamespaceTrait` and write their own definitions of `getCurrentExperiments()`, etc. Similarly they can simply `tail -f` the file output by the `SimpleExperimentTrait` / `SimpleExperiment` or extend the `ExperimentTrait` and implement a different type of logging themselves. What do you think?