[CORE] Improve SMP bootup sequence for supporting CPU hotplug in future.

This patch makes SMP bootup sequence very much like Linux kernel.

The code code requires: arch_smp_init_cpus(), arch_smp_prepare_cpus(), and arch_smp_start_cpu().

The arch_smp_init_cpus() is supposed to initizalize SMP control HW and update the cpu_possible mask based on possible CPUs.

The arch_smp_prepare_cpus() is supposed to prepare for SMP kicking and update the cpu_present mask based on actual HW CPUs present.

The arch_smp_start_cpu() is only for kicking a secondary CPU.

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