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.
Actually, from talking to Hugh last week, this is actually very likely to happen. We apparently need to explicitly allow a subnet type *not* attached to a subnet (hence the 'required' field I added). In addition, even when there is a subnet, we probably need to make some of the subnet metadata optional (i.e. the network address/mask is something that, in some cases we won't know, so returning IP address, network address, etc. for a host on a subnet type may return nil too -- i.e. in some cases we need to identify that "this subnet type exists, but foreman knows nothing about it"