Fix the interaction of projection and sortSkipAndLimit

Both in the regular and aggregating cases, sortSkipAndLimit should
only happen after projection so that the aliases used in ORDER BY
are already in scope. In addition, this enforces the contract that
by the time sort is performed, all sort items are pure identifiers,
which simplifies a fair bit of logic.
Revert "Fix the interaction of projection and sortSkipAndLimit"

This reverts commit 0a130401f6d4a1ae9ab14a3e2130275e2f8174ae.
Fix the interaction between projection, sort, skip and limit

For regular projection, we do the following:
- We project so that aliases can be used in ORDER BY, per the
contract introduced by the new hoister rewriter
- sortSkipAndLimit
- Project again if necessary to hide the fresh names introduced
  by sort for the purposes of caching expression values