add 'strict' mode for deserialization

the default mode is more permissive, handling:
- incomplete ranges ("1-")
- zero-length ranges ("1-1")
- empty indexes ("1, , 2,")
- inverted ranges ("3-1")

if any of these are encountered in 'strict' mode,
a SyntaxError will be thrown