Kinematic planning

Adds `LeggedRobotPlanningProblem` which encodes a planning problem for an instance of any `LeggedRobot` class in a solver-agnostic way. It has methods to generate dynamic or quasi-static planners.

Also adds `KinematicDirtran`  - the oft-referred-to linearly-interpolated counterpart of `InverseKinematicTrajectory`.

This still needs more documentation and probably tests, but I'd like to get the build servers running.
I've also submitted a pull-request to mitdrc/drake, as this enables collision free reach planning.
Why we use `tspan` here? I feel this is not robust if we are optimizing the time also