Update Zone::generate()

- now it takes polygon2D instead of size, so that we can specify the
target area more precisely.
- repeat zone generation until each type of facility has at least one
instance.