Vias should only be placed on the layers through which they pass. if
they pass through front or back copper, then they also pass through the
tech layers on that side
This is an update to 9d3f4bef6a
When checking the physical clearance on a layer, it is critical to check
that the via hole exists on that layer. Blind/buried and micro vias may
not overlap, so should be excluded from this check when they don't exist
on a particular layer
Similarly, we should only be reporting a single physical clearance error
for each item pair even though they may have multiple errors across
multiple layers in the case of via-via clearance
1) Move a bunch of std::map's to std::unordered_map to get constant-time
look-ups
2) Lengthen progress-reporting intervals to spend more time doing work
and less time talking about it
3) Reverse order of SHAPE_LINE_CHAINs in thermal intersection checks to
make (much) better use of bbox caches
4) Don't re-generate bboxes we already have
5) Fix some autos that weren't by reference (and were therefore copying
large datasets)
6) Rename delta progressDelta so it's easier to search for in future
7) Get rid of a few more autos (because I don't like them)
8) Pass large items to lambdas by reference
Fixes https://gitlab.com/kicad/code/kicad/issues/12130
Threaded DRC access will write to this string, re-allocating the memory
without any synchronization between threads using the string. Comment
adding this listed performance as a reason for using shared strings.
Measured performance does not seem noticeably different in either case,
even with high-error count boards. If there is a case where the
performance is limiting, we can replace these wxStrings with
std::wstring and utilize fmt
Fixes https://gitlab.com/kicad/code/kicad/issues/9888