ioport_array_finder: [Alex Jackson]

Clean build probably needed since this touches a core header file.

ioport_array_finder is a new device finder template for finding,
unsurprisingly, an array of ioports. It is mainly intended to
help handle multiplexed ioports without runtime tagmap lookups
in a more elegant way than was previously possible.

It is similar in principle to shared_ptr_array_finder; however,
rather than passing a single tag that gets automatically decorated
with numeric suffixes, you need to pass an array of tags (this is so
ioports can continue to have human-meaningful tags rather than the
tags being forced by how the hardware multiplexing happens to work).

Because C++ doesn't have array literals, and because most driver
state class constructors are defined in header files, the semantics
are a little different from other device finders (and possibly
awkward/suboptimal, this is the best I could think of). You have to
declare the array of tags as a static class member and define it
somewhere in a source file (defining it near the function that
actually reads the multiplexed ports seems like the most logical
place to me).

Updated bladestl.c to use ioport_array_finder; will wait for Micko to
pass judgement on the semantics before updating more drivers.