Allow for nil chaining in JSON and require an exception on out-of-bounds indexing

Allows for nil chaining, as discussed in IRC. Also made accessing invalid JSON array indexes throw an exception. The tests explain everything:

``` nimrod
let testJson = parseJson"""{ "a": [1, 2, 3, 4], "b": "asd" }"""
# nil passthrough
assert(testJson["doesnt_exist"][1] == nil)
assert(testJson["doesnt_exist"]["anything"] == nil)
# default param
assert(testJson["doesnt_exist",%true].bval)
assert(testJson["doesnt_exist"][1,%true].bval)

# Bounds checking
try:
  let a = testJson["a"][9]
  assert(false, "EInvalidIndex not thrown")
except EInvalidIndex:
  discard
try:
  let a = testJson["a"][-1]
  assert(false, "EInvalidIndex not thrown")
except EInvalidIndex:
  discard
try:
  assert(testJson["a"][0].num == 1, "Index doesn't correspond to its value")
except:
  assert(false, "EInvalidIndex thrown for valid index")
```