[CORE] Startup secondary CPUs as part of system init work

The boot-time stack is generally very small when we are executing
init_bootcpu() and init_secondary() functions. Also, we are doing
too many things in init_bootcpu() for SMP host. For boot CPU, most
of the initialization should be done as part of system init work.

This patch moves secondary CPU startup sequence from init_bootcpu()
to system init work so that we can reduce burden on boot-time stack
and also make sure that boot CPU is fully functional when starting
secondary CPUs (i.e. scheduler has started working for boot CPU).

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