Allow complex gets

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.
Add travil-ci support

Add .travis.yml in order to have travis-ci automatically
build the project for different versions of Erlang.

Also updated the readme to include a build status section
with a build status image.
Add example of complex getters in the readme

The readme could also contain exampels of
setters and deletes, but in order to keep it
short and concise, I think it better to just
include the `get` example.
Bug fixes and improved tests

First off, I have left some comments in the
code to make it easier to follow.
This breaks somewhat with what is done in the
rest of the code, so I can remove it, if you prefer.

The code has now been updated to dynamically
create missing structure in the path.

NOTICE: This breaks existing functionality,
where a missing path would result in an exception
being thrown!

For example:

    > ej:set({"a", "b", "c"}, {struct, []}, <<"value">>).
    {struct,[{<<"a">>,
              {struct,[{<<"b">>,{struct,[{<<"c">>,<<"value">>}]}}]}}]}

The current implementation allows usage like this:

Create new objects from scratch:

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

Append non existant values while using filtering

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

    > S2 = ej:set({"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({"users", {"name", "sebastian"}}, S2, ej:set({"location"}, {struct, []}, <<"Norway">>)).
    {struct,[{<<"users">>,
              [{struct,[{<<"location">>,<<"Norway">>},
                        {<<"name">>,<<"sebastian">>}]},
               {struct,[{<<"company">>,<<"opscode">>},
                        {<<"name">>,<<"seth">>}]}]}]}

Thanks.
Revert to original set behaviour, introduce set_p

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

The original test that verifies the `no_path` exception
has been reintroduced.
Merge branch 'complex_get_set'
Merge branch 'travis'
Make Travis-CI icon point to this repo