Refactor

- Rename Reading to Observation
- Change observation from a typedef to a full-fledged class
- Move a bunch of problem-specific stuff into the Model, including particle
  resampling
- Change model to require every terminal state to have a common, unique
  observation. This is intuitive and keeps the logic of the search simple.
- Change hierarchy to require root to branch on terminal-state particle-sets
  instead of particle sets representing robots in the same location. Robots in
  the same location are not treated specially now, they just emit a regular
  laser readings (all 0s).