Separate projection functions into separate file.
Refactorings by slava.
Refactor out the tree construction.
Define interface for selector-fields merger
Make conflictFn also a conflict resolution function
Implement combinattion of selector and projection for inclusive projection.
Tests for combination of selector and inclusive projection
Fix error reporting
Mark tests for inclusive projections
Tests for exclusive projections.

TDD FTW
Implement combine selector and projection for both including and excluding projections.
Apply shared projection to anything stored in the cache.
Test to catch modifier affecting fields projected out
Filter out modified object

If modifier sets fields we don't like in cache, for example
Define projection function contract: returned doc shouldn't retain anything from the passed argument.
Projection function never retains anything from passed doc.

Always does deep copy.
More tests on combining a selector with a fields projection:

A case when a selector has a path with numbered keys overlapping with fields.
Remove an outdated comment. Fix typos
Make "getPathsWithoutNumericKeys" a package scope variable rather than globally available underscore method.
Tests on $where