java_gen: Fixed bug in Ipv[46]AddressWithMask when mask == /0

Both IP address parsers treated the case mask == /0 incorrectly.
Fixed the behavior and added to the unit tests.
Clean up the IPv6 unit test.
java_gen: value types: add NO_MASK, FULL_MASK constants where missing

This is necessary so types can distinguish non-canonical forms.
java_gen: add support for properties to specify a custom code template

This will be used for getCanonical()
java_gen: OFOxm: add 'canonical' virtual attribute, test

This enables OFOxm objects to return a 'canonical' representation,
where trivial masks (all-0, all-1) are converted to the main
representation.
java_gen: OFOxmList: canonicalize OFOxms on build()
java_gen: MatchV3.builder() - remove synchronized

Builders are only safe for use in a single thread anyway. No
need to synchronize.