Summary of changes/additions:
- Implemented a `Table` class that allows for a dict and numpy-like interface with numpy array backend
- `MarkovDecisionProcess` and `PartiallyObservableMDP` algorithms return `Results` objects with attributes in the form of `Table`s (e.g., `state_value`, `action_value`, `policy`) - note that this is a breaking change
- For all MDPs and derived problem classes, `is_terminal` has been changed to `is_absorbing`
- `FunctionalPolicy` and `TabularPolicy` classes introduced
- `PolicyIteration`, `ValueIteration`, and `MultichainPolicyIteration` have been (re-)implemented
- Tests have been streamlined
- Organization of core modules has been streamlined