SERVER-6851 Remove old external sort implementation

Also removes HLMutext as it was only used by the old implementation.
SERVER-11413 Fix agg DocumentSourceCursor explain format

All stages are supposed to explain as {$stageName: <STUFF>}. The wrapping
object with the stage name was accidentally removed in commit
54cee6c07af4c2973f34b25de271f7258dafbc84.
SERVER-12180 Clean up dependency tracking code

Behavior changes (none effect semantics of pipeline, just implementation):
* We now track what we know about fields and metadata separately. This allows
  us to prove that we won't need the text score if we see a $group or $out.
* If we don't need any fields from the source document we now use a projection
  that will return an empty document, or just the text score if it is needed.
  We used to use {_id: 0} which returned all other fields.

Code organization changes:
* Dependencies are now tracked using a dedicated struct rather than a
  set<string> with some magic strings.
* ParsedDeps is now a proper class rather than a typedef.
* Removed ExpressionFieldPath::_baseVar since its former role is fulfilled
  better by _variable.
SERVER-8033 Sharded agg should only send needed fields from shards to mongos

*** BEFORE ***

> db.foo.aggregate([{$sort: {score:1}}, {$limit: 10}, {$project: {_id: 1}}], {explain:true})
{
    "splitPipeline" : {
        "shardsPart" : [
            {
                "$sort" : {
                    "sortKey" : {
                        "score" : 1
                    },
                    "limit" : NumberLong(10)
                }
            }
        ],
        "mergerPart" : [
            {
                "$sort" : {
                    "sortKey" : {
                        "score" : 1
                    },
                    "mergePresorted" : true,
                    "limit" : NumberLong(10)
                }
            },
            {
                "$project" : {
                    "_id" : true
                }
            }
        ]
    },
    "shards" : {
        "shard0000" : {
            "host" : "localhost:30001",
            "stages" : [
                {
                    "$cursor" : {
                        "query" : {

                        },
                        "indexOnly" : false,
                        "cursorType" : "BasicCursor"
                    }
                },
                {
                    "$sort" : {
                        "sortKey" : {
                            "score" : 1
                        },
                        "limit" : NumberLong(10)
                    }
                }
            ]
        }
    },
    "ok" : 1
}

*** AFTER ***

> db.foo.aggregate([{$sort: {score:1}}, {$limit: 10}, {$project: {_id: 1}}], {explain:true})
{
    "splitPipeline" : {
        "shardsPart" : [
            {
                "$sort" : {
                    "sortKey" : {
                        "score" : 1
                    },
                    "limit" : NumberLong(10)
                }
            },
            {
                "$project" : {
                    "score" : true,
                    "_id" : true
                }
            }
        ],
        "mergerPart" : [
            {
                "$sort" : {
                    "sortKey" : {
                        "score" : 1
                    },
                    "mergePresorted" : true,
                    "limit" : NumberLong(10)
                }
            },
            {
                "$project" : {
                    "_id" : true
                }
            }
        ]
    },
    "shards" : {
        "shard0000" : {
            "host" : "localhost:30001",
            "stages" : [
                {
                    "$cursor" : {
                        "query" : {

                        },
                        "fields" : {
                            "score" : 1,
                            "_id" : 1
                        },
                        "indexOnly" : false,
                        "cursorType" : "BasicCursor"
                    }
                },
                {
                    "$sort" : {
                        "sortKey" : {
                            "score" : 1
                        },
                        "limit" : NumberLong(10)
                    }
                },
                {
                    "$project" : {
                        "score" : true,
                        "_id" : true
                    }
                }
            ]
        }
    },
    "ok" : 1
}