dhcpv4_assign: rework the assignment logic

RFC: I just want to hear your opinion on the new code.

the code tries to:
  1. assign the requested IP
  2. assign the mapped IP
  3. assign the mapped IP + 1 (and walk in the possible space with mod and stuff)

question: is the order in `iface->dhcpv4_assignments` relevant for other code parts?