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
At Facebook we actually use separate classes for managing namespaces and assigning users to namespaces, so I haven't thought of exactly how users might use the Namespace object for both purposes.  I bundled the two together in one class to make it clear how the assignment and allocation aspects worked together, but I wonder if we should unbundle these two aspects.

In the meantime, I wonder if `// currently ... if {}` should be replaced with:

```
invariant(!is_null($this->experiment), "addExperiment() cannot be called after an assignment is made");
```

because it's kind of crazy to use the object in both ways.