[WIP] fix getNextAvailableAddress to use local maximums instead of just last a...

...ddress

@dallasmarlow @joshrabinowitz @Primer42 @maddalab Comments/reviews welcome. This intends to fix IP allocation when not using pools. Old behavior would just allocate the next address, regardless of if a lower address was free. It would fail to allocate if you had a range 0..20 and IPs 18,19,20 were in use :(

Ive tested this for edgecases, and believe it is working correctly. However, I would love comments. I have a sneaking suspicion I could do this slickly with a for comprehension, but it escapes me. 


does that have to be size - 2? either that or remove the inclusive
```
scala> x
Array[Int] = Array(1, 2, 3)

scala> Range(0, x.size - 1)
scala.collection.immutable.Range = Range(0, 1)

scala> Range(0, x.size - 1).inclusive
scala.collection.immutable.Range = Range(0, 1, 2)

scala> x.size
Int = 3

scala> x(2)
Int = 3

scala> x(2+1)
java.lang.ArrayIndexOutOfBoundsException: 3

```