make find_key and insert_key take an array index if the object is an array

Make ucl_object_find_key[l] support finding an array index, as well as a key

Make ucl_object_insert_key_common (and by
extension: ucl_object_replace_key, ucl_object_insert_key_merged, etc)
access an array index in place of a key if the object is an array
This is inside ucl_object_insert_key_common, which is used in ucl_object_insert_key_merged and ucl_object_replace_key which are recursive

If i have:
{
  name = vm0001;
  disks = [
    {
        type = ahci-hd;
        path = /zroot/vm/disk1.img;
    },
    {
        type = ahci-hd;
        path = /zroot/vm/disk1.img;
    }.
  ]
}


and I want to replace: disks.1 with a new object, there was no way to do that.

I suppose a new API specifically for arrays  (ucl_object_merge_arrays(..., merge, replace), and the modifying ucl_object_insert_key_common to detect arrays, and use that might make more sense.

The thing is this is all done recursively, so having a separate API for arrays causes problems. I could make it check for errors from strtoul, so 'somekey' wouldn't evaluate to array index 0.

I'll have to clean up my use cases and discuss it with you further and come up with the best way to implement it.