### Description
* Moves the logic of creating chunks from ChunkItem implementators to
ChunkType.
* Collect chunk items during chunk_group instead of per chunk
* Removes the optimization and produce optimized chunks in the first
pass, by splitting them according to heuristics
* Aims for chunk size between 30k and 300k
* App and Vendors code is separated
* node_modules with different package names are separated
* code is separated by folder structure
* Makes Code Generation independent of chunk group
* removes recursive is_async in favor of determining the async module
state during chunk group creation.
### Testing Instructions
<!--
Give a quick description of steps to test your changes.
-->
Closes WEB-1771
---------
Co-authored-by: Justin Ridgewell <justin@ridgewell.name>