1. Refine ExtendPageDataOption, simplify the implmentation
2. Introduce LayoutDistributor as the unique route layout entry
3. Inject layout components to LayoutDistributor
4. Register layout components located at themedir/layouts
5. Reorganize the default theme's structure
In the old implementation, the enhanceApp fi`le that doesn't have `default export` will be written to the same file "inject.js", but it will cause conflict if two files contains the same import definition.
1. This is caused by asynchronous page components cannot be resolved during server side rendering. revert to register async components at router's "beforeEnter" hook instead.
ref: https://ssr.vuejs.org/guide/structure.html#source-code-structure
2. Rename 'filepath' to 'filePath'.