Historically, bhyve rejected devices whose MMIO BAR size was not
page-aligned, effectively prohibiting passthrough of BARs smaller than
PAGE_SIZE.  Some devices legitimately expose sub-page BARs (e.g., <4K),
and they can be safely passed through as long as the mapping is made on
a page boundary and any page sharing is validated.
This change allows passthrough of MMIO BARs smaller than PAGE_SIZE by:
- mapping the containing page (page-aligned base) while remembering the BAR's offset within that page, and
- checking whether the hosting page is shared with any other device (and failing with a clear error if a conflict is detected).
I/O BARs (PCIBAR_IO) remain unaffected.
Behavioral changes:
- Previously: bhyve aborted with "base/size not page aligned" on sub-page MMIO BARs.
- Now: sub-page MMIO BARs are accepted; if the enclosing page is shared with another device, bhyve refuses passthrough with a descriptive message.