Partial indexing implementation

This is the partial indexing implementation that I develop during my internship last summer. I tried to rebase the branch in my repository in order to keep it clean but since there are too many changes it didn't work so I had to merge it.

I won't go into details about this feature since I already wrote a [specification] (https://gist.github.com/buremba/becd46dc40b920fc073f). Even though I couldn't get any feedback from [the post] (https://groups.google.com/forum/#!topic/hazelcast/yLIRhCpDeCg) in Google Groups and the private e-mails that I sent you, I believe that at some point you will have to implement this kind of feature. Because if your customers have this kind of #3253 complex queries, as far as I can see from other database engines there is no way to provide the perfect querying mechanism without this kind of advanced technique so almost all of the advanced databases (Postgresql, MongoDB, Oracle Database) and Hazelcast competitor Coherence leverage this feature for complex queries.

I know that you have a strict rule that developers who are not senior cannot contribute to Hazelcast but I also know that you have some plans to improve querying performance in 3.5 release so even though this implementation is not bug-free since I'm not really an expert on this area, I spent some time on it and I think you may benefit from it when working on 3.5 release. Therefore I wanted to send this pull request because otherwise it would most likely be forgotten in my Hazelcast fork.