Allow complex gets, sets, deletes, and set_p

Allow gets where subelements of arrays
are searched for a particular pattern:

Given:

    {"cakes": [
      {"frosting":"white", "tastes":"good", ...},
      {"frosting":"red", "tastes":"good", ...},
      {"frosting":"blue", "tastes":"bad", ...}
    ]}

and the query:

    {"cakes", {"frosting", "white"}}

we should get:

    [{"frosting":"white", ...}].

Given the query:

    {"cakes", {"tastes":"good"}}

we should get

    [{"frosting":"white", "tastes":"good", ...},
     {"frosting":"red", "tastes":"good", ...}]

Allow setting and deleting complex values

When setting a value at a complex path it replaces the old value, and
adds a parameter to make sure the complex path is still valid:

    {"beaches": [
         {"sandy":true,
          "name":"Family beach"
       },{"sandy":false",
          "name":"Less friendly beach"
       }]
    }

    ej:set(
        {"beaches", {"sandy", true}},
        Beaches,
        {struct, [{<<"name">>, <<"Sandies">>}]}).

Returns

    {"beaches": [
         {"sandy":true,
          "name":"Sandies"
       },{"sandy":false",
          "name":"Less friendly beach"
       }]
    }

While

    ej:set(
        {"beaches", {"sandy", true}, "water_temperature"},
        Beaches,
        <<"Pretty Warm">>}).

Appends the property to the existing entry:

    {"beaches": [
         {"sandy":true,
          "name":"Family beach",
          "water_temperature":"Pretty Warm"
       },{"sandy":false",
          "name":"Less friendly beach"
       }]
    }

If there are multiple entries matching a complex query,
then all of them will be affected by the change.

Support for deleting one or more records using complex
queries is also supported.

A new method, set_p is now introduced, which behaves
much like the -p option for mkdir. Missing intermediate
nodes are created on demand.

Create new objects from scratch:

    > S = ej:set_p({"users", {"name", "sebastian"}, "location"}, {struct,[]}, <<"Germany">>).
    {struct,[{<<"users">>,
              [{struct,[{<<"location">>,<<"Germany">>},
                        {<<"name">>,<<"sebastian">>}]}]}]}

Append non existant values while using filtering

    > S1 = ej:set_p({"users", {"name", "sebastian"}, "company"}, S, <<"aircloak">>).
    {struct,[{<<"users">>,
              [{struct,[{<<"location">>,<<"Germany">>},
                        {<<"name">>,<<"sebastian">>},
                        {<<"company">>,<<"aircloak">>}]}]}]}

    > S2 = ej:set_p({"users", {"name", "seth"}, "company"}, S1, <<"opscode">>).
    {struct,[{<<"users">>,
              [{struct,[{<<"company">>,<<"opscode">>},
                        {<<"name">>,<<"seth">>}]},
               {struct,[{<<"location">>,<<"Germany">>},
                        {<<"name">>,<<"sebastian">>},
                        {<<"company">>,<<"aircloak">>}]}]}]}

Getting values through filters

    > ej:get({"users", {"name", "seth"}, "company"}, S2).
    [<<"opscode">>]

Or accessing values inside an array:

    > ej:get({"users", "company"}, S2).
    [<<"opscode">>,<<"aircloak">>]

    > ej:get({"users", {"name", "sebastian"}, "location"}, S2).
    [<<"Germany">>]

Whole subtrees of an object can also be replaced when using the filter:

    > S3 = ej:set_p({"users", {"name", "sebastian"}}, S2, ej:set_p({"location"}, {struct, []}, <<"Norway">>)).
    {struct,[{<<"users">>,
              [{struct,[{<<"location">>,<<"Norway">>},
                        {<<"name">>,<<"sebastian">>}]},
               {struct,[{<<"company">>,<<"opscode">>},
                        {<<"name">>,<<"seth">>}]}]}]}
Fix complex get/set/set_p for jiffy style EJSON
Fix order reversing bug in complex set
Complex get/set now specified as {select, {Key, Value}}

The complex get/set behavior is different enough from the standard
mechanism that it is worth setting off with a tagged element in the
path. This makes the filtering explicit and will be more amenable to
extension in the future if desired.

It is now also possible to capture all objects in a list via {select,
all}. This fixes a problem with the top-level filtering which was too
aggressive and had introduced ambiguity where the same paths had
different meaning depending on the shape of the data.
Add small example for complex get to README

- add Sebastian to THANKS section
Merge branch 'complex_get_set'