Refactor planner API (#314)
* Add Planner class and associated APIs
* Fix code format
* Pass function argument as const reference
* Rename planning problems
* Revise snap planner
* Apply snap planner to util
* Add PlannerFor[Single/Multi]Problem
* Remove getPlannableProblems()
* Fix const-correctness of CompositePlanner
* Set state space when a planner is created
Move interpolator from problem to planner
* Rename Problem's getName() to getType()
* Fix grammar errors
* Use unordered_set for goal states
* Remove interpolator from problem
* Code format
* Address comments that are straightforward
* Add missing explicit specifier
* Use more descriptive parameter name
* Add utility functions for goal states
* Minor updates
* Remove PlannerForMultiProblem
rename PlannerForSingleProblem to SingleProblemPlanner
* Remove setters from problem
All the problem classes intentionally don't have setters. This is because we assume creating a new problem for different problem settings makes sense. We can revisit this design decision if we find a compelling reason to have setters.
* Rename TheProblem to SolverblaProblem
* Take problem as const reference
* Remove CompositePlanner::addPlanner()
* Move constraint to Problem
* Add missing [in]
* Fix util according to the API changes
* Address a few TODOs
* Remove constraint from concrete problems
* Code format
* Fix typo: SolverbleProblem --> SolvableProblem
* Be further strict to const-correctness
* Add type checking assertions
* Add docstrings
* Update changelog
* Address Brian's comments (needs code format)
* Format code
* Address Gilwoo's feedback
* Update header guard name
* Throw exception for zero-sized direction vector
* Use \throw instead of \throws
* Pass planner by const reference to check existency
* Fix compilation errors per Clang 9.1.0