message: Create selectWarehouses template method taking a predicate
  This allows for shorthand syntax to select warehouses using some
  predicate condition. It handles automatic type conversion so the
  predicate can be written to assume a `Warehouse*` is given.
diff: using namespace NAS2D;
  +namespace
  +{
  + template <typename Predicate>
  + std::vector<Structure*> selectWarehouses(const Predicate& predicate)
  + {
  + const auto& warehouses = Utility<StructureManager>::get().structureList(Structure::StructureClass::Warehouse);
  +
  + const auto typeConvertedPredicate = [&predicate](Structure* structure) {
  + auto* warehouse = static_cast<Warehouse*>(structure);
  + return predicate(warehouse);
  + };
  +
  + std::vector<Structure*> output;
  + std::copy_if(warehouses.begin(), warehouses.end(), output.end(), typeConvertedPredicate);
  +
  + return output;
  + }
  +}
  +
  +
  WarehouseReport::WarehouseReport() :
  fontMedium{fontCache.load(constants::FONT_PRIMARY, constants::FONT_PRIMARY_MEDIUM)},
  fontMediumBold{fontCache.load(constants::FONT_PRIMARY_BOLD, constants::FONT_PRIMARY_MEDIUM)},
  