refactor: use Pratt's parser in {let} blocks

This PR has 2 commits:

* 4366063 - makes the `new` operator work correctly with constructor functions that override the `apply` method. Normally we shouldn't have this situation but in practice we are getting this setup while using the $klass utility for objects to be used in pipe expressions.
* 8c8b9ab is the actual change that introduces Pratt's expressions in the {let} expressions