Add indexes suggestions function

**Changes**
-
- `EvaluationResult` is now the parent class of `EfficencyResult` and `IndexResult`
- Complete `chek_for_indexes` method
- Add some test cases


**Implementation of index suggestion**
-
I followed [Optimizing MongoDB Compound Indexes] (http://java.dzone.com/articles/optimizing-mongodb-compound?mz=36885-nosql)  to generate indexes suggestions.

Indexes fields will be generated in this order:
- EQUAL_TYPE   `e.g. "A": "10"`
- SORT_TYPE        `e.g. "orderby" => { "C": 1.0 }`
- RANGE_TYPE  `e.g. "A": {"$gt": 13, "$lt": 27}`

Analyzer will ignore the field which includes currently unsupported operators such as `$regex`, `$where` and `$near`

Analyzer will set the result an`Optional` flag  when encounter unsupported operators in query  because these may cause index suggestions inaccurate.


**Known problem**
-
Index suggestion function cannot handle query with embedded document properly.
I'm not sure what is ideal indexes of the query with embedded document.
Specifically, For query `'field': { 'sub1': {'sub3': 3, 'sub4': 4}, 'sub2': 2 }`
Should the ideal indexes be `{'sub1': 1, 'sub2': 1}` OR `{'sub1.sub3': 1, 'sub1.sub4': 1, 'sub2': 1}` ?

Should `Evaluator` read indexes info from db itself? Would that be more flexible getting user indexes info from invoker?
@jonasz  Do you have any idea about this?