OCSADV-196: ImPolygon

Added ImPolygon class to create polygonal Shape objects independent of diva.
You can take construction via `addPoint` back to O(n) by making this a `sealed abstract class` with a private constructor, and a factory method on the companion object that *reverses* the list of points that it is given. This turns `addPoint` into a simple cons operation, and you can build `closedPath` (which should probably be a `lazy val` and non-`Option` as Shane suggests) via `foldRight`. Note that `bounds` must be lazy if `closedPath` is lazy.

The only reason we're being picky here is that this is a very fundamental data type and it's important to try to get it right.