Subnet types

This includes two things:
1) replace the initial subnet types list with a fuller list, and related refactoring
2) the first iteration of the NetworkQuery API/helper class for grabbing interfaces, etc for hosts in the context of a particular subnet type.

1) is largely done here; 2) will need more work, but that could be done either as part of this PR, or as a follow-on PR after merging this one, since it's not referenced anywhere yet.
why do we distinguish among physicals and virtuals? I think you can do `host.interfaces.where(:subnet_id => subnet.id).first`

also note that this wouldn't find primary interface, since its attributes are part of host model, so we should check whether `host.subnet_id == subnet.id` and in such case return host? Or we should not return the interface object but some hash of attributes (maybe with link to interface or host) or our own Staypuft interface. Host has similar interface but misses some attributes, basically it has ip, mac, subnet_id but misses others i.e. identifier (= primary_interface attribute).