[CORE] Split init work into two parts

This patch splits system_init_work() into two parts that is
1. Pre-init work (i.e. original system_init_work())
2. Post-init work (i.e. system_postinit_work())

We need a separate system_postinit_work() because current
device driver framework also IO frameworks to defer device
probing using system workqueue. If IO frameworks do use the
defer probing feature then we would end-up freeing init
memory before deferred probe is called called device drivers.
We might also not see the character/rtc device because its
device probing might have been deferred.

To solve the above issue, we have separate system_postinit_work()
which is scheduled as a last step in system_init_work() hence
it will be executed after deferred device probing work. This will
ensure that when we are in system_postinit_work(), all the
deferred device probing work is also finished.

Signed-off-by: Anup Patel <anup@brainfault.org>