Initial attempt at using graph theory for Loop

This adds a virtual ::edges() method to all HVACComponent objects.
Objects that need a specific implementation reimplement ::edges().

findModelObjects(), a Depth First Search in Loop, uses the edges()
methods to find the immediate downstream components of a specific
ModelObject. It then recursively continues until it finds all objects
between the source and sink.

This passes all unit tests and visual spot checking in OS App. Next
step is to implement caching.
Update loop search
Unit test for ::edges()
Add comments and update unit tests
Merge pull request #1052 from ORNL-BTRIC/Use_graph_theory

Continue new Loop search approach