Make IP allocation less sieve like

The model abstraction abstraction combined with pluggable allocation
was leaking ips/allocatable_ips very very badly on a heavely loaded
system. Move ipv4 allocation into the model directly so we can use
a row level lock inside a single session to toggle allocation.