OCSADV-196: ImPolygon

Added ImPolygon class to create polygonal Shape objects independent of diva.
I was thinking that `path` could probably be done away with, but we do unfortunately need `closedPath` for much of the logic of `intersection` and `contains`.

I was thinking something along the lines of:
`val closedPath = { val path = ... /* same logic */ } // Note still an Option[GeneralPath]
val bounds = closedPath.getOrElse(new GeneralPath()).getBounds`
but I wasn't really sure if that is preferable, since we then have two calls to the `GeneralPath` constructor in the worst case instead of just one.