[CORE] Minor improvements to IPI performance

The Async IPIs are processed by bottom-half orphan VCPU with
default priority on each host CPU. If a host CPU is loaded with
threads and VCPUs with default priority then async IPIs on that
host CPU will become very slow. Ideally we would expect only a
minor delay in executing async IPIs but not variable delay which
depends on load conditions of host CPU. To solve this, we assign
highest priority to bottom-half orphan VCPU for IPI processing.

On otherhand, Sync IPIs are processed in interrupt context and
the caller blocks until all destination host CPU have executed
the IPI. This patch does few improvements to the waiting logic
of sync IPI.

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