OCSADV-196

Created the interface for science models and extracted the GMOS science area code from the TPE into the model.
Minor changes to ImPolygon for Java interoperability.
Again I'd say there's no need to map to `Area` and then `foreach` on the `Area`s.  You can just not `yield` anything and do the mutation right there.  Something like:

````scala
def toSlit(fov: Shape, r: Rectangle): Area = {
  val width = ...
  ...
  new Area(createSlit(x, y, width, height))
}

val area = new Area
for {
  fov <- ...
  ...
  rect = fov.rect
} area.add(toSlit(fov, rect))
````