Support for sorting a query set

Pass on either key or a sorting function to sort data. The API is
as follows:

    // Simple sort just by key
    querySet.sort('age')
      .execute(function (err, models) {
         // Use the sorted data.
      });

    // Try a descending sort now.
    querySet.sort(function (model) {
      return -model.age;
    }).execute(function (err, models) {
      // Use the sorted data.
    });

Also, this defines the architecture for actions over a query set. Every action can
have multiple set of entries each applied in the order defined. Actions themselves,
are executed in a predefined order.

Until querySet.execute is called, none of the actions or source processing is done.

Signed-off-by: Rohan Jain <crodjer@gmail.com>