Implement left factoring
Merge remote-tracking branch 'arash/left-factoring'
Refactor left factoring

* Rewrite map and destructure with LOOP
* Push productions into list to reduce consing