pub fn parse_ranges<I, S>(ranges: I) -> Result<Vec<IpRange>, String>where I: IntoIterator<Item = S>, S: AsRef<str>,
Parses a list of ranges; invalid entries are reported so a typo never opens a door silently.