Bug 1078128 - [Settings] remove try_show_homescreen_section.js and move this logic into root.js

...to root.js
The promise returning from `init` should not wrap any result. The reason is we may have other async functions other than `apps` and `init` should be neutral.
And the other thing is we should prevent the initialization process being executed multiple times. For example, it runs multiple times if I do:
```
AppsCache.apps();
AppsCache.apps();
```
The solution would be cache the promise generated from the initialization process and always return it when available.