libgraphviz: Id::new returns Optional<Id> instead of fail!ing

creating a new Id object requires the format to match a subset of `ID` format defined by the DOT language. When the format did not match, the function called assert. This was not mentioned in the docs or the spec. I made the failure explicit by returning an Option<Id>.