Note that this is not an exhaustive list, because these methods are only
concerned with brackets, colons, and port numbers. Full validation of the
host field (if desired) is the caller's responsibility.

Split a freeform string into a host and port, without strict validation.
Note that the host-only formats will leave the port field undefined. You
can use withDefaultPort(int) to patch in a default value.

Provide a default port if the parsed string contained only a host.
You can chain this after fromString(java.lang.String) to include a port in
case the port was omitted from the input string. If a port was already
provided, then this method is a no-op.

URI formatting requires that IPv6 literals be surrounded by brackets,
like "[2001:db8::1]". Chain this call after fromString(java.lang.String)
to increase the strictness of the parser, and disallow IPv6 literals
that don't contain these brackets.