Introduce ioapic enumerators, which is used to probe and config ioapics
ioapic enumerator implementation should provide two methods:
ioapic_probe()
Make sure that if this enumerator is selected, later ioapic
enumeration could work. Return error code upon failure.
ioapic_enumerate()
Enumerate ioapic and prepare for later ioapic configuration in
the common code (the configuration in the common code is not
implemented yet).
ioapic enumerator implementation could be registered by calling
ioapic_enumerator_register() with ioapic_enumerator struct. The
higher the priority field, the earlier the ioapic enumerator's
ioapic_probe method will be invoked.
Currently a do-nothing-other-than-logging ioapic enumerators are
implemented and registered. This dummy ioapic enumerator uses ACPI
MADT.