`config.NewConfig()` with consul source will both read from consul
and watch consul for changes. Hence, the `prefix` is used in these
2 cases:
- read case: it is used to strip path based on the `KVPair` returned
from consul `kv.List()` method
- watch case: it is used as the `key` of watch query (`keyprefix` type)
So for *watch case*, the `key` is leagal to be `/` for watching change
on root. While for *read case*, because `KVPair.Key` is always stripped
off the leading slash, so if user specified some `prefix` with leading
slash, we should strip it also.
An extream case would be: user want's to read & watch node in root dir.
One would specify `prefix` as `/`, and it should work then.
Check whetehr the 1st level encoded json is array or not, to
support 1st level array in consul config.
During debug, i suspected the incapability of arrray is caused by
json reader, so i added test for array. I think it makes no harm
to also check that in.
When `consul.StripPrefix(true)` is set, current impl. will pass the
specified prefix (or default prefix) when calling consul api.
However, `prefix` in consul api starts with no leading slash, so
the default prefix (`/micro/config`) doesn't actually work.
I avoid code changes (esp. the one in `util.go`) to eliminate
impact on users who already notice it.