Changed matrix_2d to use accessors instead of exposed data members. As a result had to change path_data away from being a discriminated union to being the base class for a polymorphic class hierarchy. This in turn necessitated changes in surface, path_factory, path, and various classes that use matrix_2d along with some implementation dependencies. Eliminated operator== and operator!= for path_data.