Update of how the source focuses on the guide.
Before it would just focus on the first element after the source. This was problematic when gaps and wolter optics were used, since the wolter optic doesn't start at the modules start.
Now the base guide element can generate a focus_info dict that describe the usual focusing at the start of a module, but other elements can overwrite this behavior, for example the wolter or gap.
The Wolter will request focusing deeper into the element, depending on the parameters chosen. That gap will decline focusing, and the next element in the guide will be asked for a focusing info dict.
The guide class takes care of finding the first element in the guide with focusing info different from None. If none are present, the target size and distance is used. Problems could occur if a los breaker has None for focusing, so this should not be allowed. Could include a check for this.
The sources were updated to take this focus_info instead of the first element. The runner were updated to generate the focus_info from the guide object and pass it to the source.