Core: Add inner hits 

Inner hits allows to embed nested inner objects, children documents or the parent document that contributed to the matching of the returned search hit as inner hits, which would otherwise be hidden.

Example search request w/ nested query:

```bash
curl -XGET "http://localhost:9200/stack/question/_search" -d'
{
  "query": {
    "nested": {
      "path": "comments",
      "query": {
        "match": {
          "comments.text": "elasticsearch"
        }
      }
    }
  },
  "_source": {
    "include": "title"
  },
  "inner_hits": {
    "comments": {
      "path": {
        "comments": {
          "_source": {
            "include": "text"
          },
          "query": {
            "match": {
              "comments.text": "elasticsearch"
            }
          }
        }
      }
    }
  }
}'
```

Example response:
```json
{
   "took": 16,
   "timed_out": false,
   "_shards": {
      "total": 5,
      "successful": 5,
      "failed": 0
   },
   "hits": {
      "total": 3,
      "max_score": 2.1920953,
      "hits": [
         {
            "_index": "stack",
            "_type": "question",
            "_id": "485316",
            "_score": 2.1920953,
            "_source": {
               "title": "timestamp +5 hours logstash"
            },
            "inner_hits": {
               "comments": {
                  "hits": {
                     "total": 1,
                     "max_score": 2.1920953,
                     "hits": [
                        {
                           "_index": "stack",
                           "_type": "question",
                           "_id": "485316",
                           "_nested": {
                              "field": "comments",
                              "offset": 2
                           },
                           "_score": 2.1920953,
                           "_source": {
                              "text": "So my timezone is EST which shows in the log, but the agent stamps 2013-03-06T17:03:56.934Z before it sends to elasticsearch."
                           }
                        }
                     ]
                  }
               }
            }
         },
         {
            "_index": "stack",
            "_type": "question",
            "_id": "107518",
            "_score": 1.8563976,
            "_source": {
               "title": "Web based file search in the lan?"
            },
            "inner_hits": {
               "comments": {
                  "hits": {
                     "total": 1,
                     "max_score": 1.8563976,
                     "hits": [
                        {
                           "_index": "stack",
                           "_type": "question",
                           "_id": "107518",
                           "_nested": {
                              "field": "comments",
                              "offset": 2
                           },
                           "_score": 1.8563976,
                           "_source": {
                              "text": "Did you ever settle on something? I am looking for something similar. Does Solr work? that seems to be the most common suggestion. I tried elasticsearch but didn't know how to add a network path as an index to it."
                           }
                        }
                     ]
                  }
               }
            }
         },
         {
            "_index": "stack",
            "_type": "question",
            "_id": "419532",
            "_score": 1.2994784,
            "_source": {
               "title": "How to silently buffer tunnel traffic on network split, and automatically renew the connection when possible?"
            },
            "inner_hits": {
               "comments": {
                  "hits": {
                     "total": 1,
                     "max_score": 1.2994784,
                     "hits": [
                        {
                           "_index": "stack",
                           "_type": "question",
                           "_id": "419532",
                           "_nested": {
                              "field": "comments",
                              "offset": 4
                           },
                           "_score": 1.2994784,
                           "_source": {
                              "text": "Let me elaborate. I'm using ElasticSearch replication, when network disconnects, it puts all \"cluster\" into \"yellow\" state, means writes are postponed. I want to use \"localhost\" as replica nodes' host setting in config, both in China and in Germany. Under this there will be daemons acting as tcp proxy buffer and handling disconnections nicely. That's the outline of the idea, however maybe it would better to just leave it to ElasticSearch's protocol and handle yellow state in my app."
                           }
                        }
                     ]
                  }
               }
            }
         }
      ]
   }
}
```
For documentation and more examples check the: `inner-hits.asciidoc` file.

Closes #3022, #3152
The reason this is needed is that otherwise the highlighters can't do their job if they operate on the _source. Nested docs don't have the _source, only the root document has this. 

So if highlighting is required then we also fetch the _source from the root document, so it is available in the hit context and for the nested docs highlighting will not attempt to go to disk for fetchting the _source for nested document which isn't stored for these documents.