Support optional first/last & more characters

 * First and last endpoints should be optional and nil if missing.
 * Allow more characters in range endpoints, including .