Extract ElementSources class
This creates a new ElementSources
class to better separate concerns, reducing the size of the Element
class. An ElementSources
object represents the combined sources of an element.
This branch also includes a small commit to fix an issue with source push, discovered during refactoring.