Add Python install code similar to Ruby

Initial attempt at creating a Python folder with the binding libraries
and such in the install location. This code works but needs further
refinement and translation of helper Ruby code to Python code.
Merge branch 'develop' into Update_python
Merge branch 'ImplicitPath' into Update_python
Change getModelObjects to getConcreteModelObjects

Update all getModelObjects<>() to getConcreteModelObejcts<>() where
possible. The latter is faster since it doesn’t search all objects in
the model every time.
Speed up AirLoopHVAC::AddBranchForZone

AirLoopHVAC::addBranchForZone
0.139s -> 0.079s or for 50 calls 6.946s -> 3.938s
Tested with adding ThermalZone and AirTerminal

terminal->remove() was the main source of the speedup
Remove extraneous airLoopHVAC() calls and casts

In forward translate sizing zone, it was making a call to airLoopHVAC()
which cycles through all components and takes a while if there are many
components on the loop. Plus the variable isn’t even being used.

In HVACComponent, airLoopHVAC() and plantLoop() both loop through a
vector of their respective classes but then optionalCast to the same
class. It is not necessary.
Optimize IddObject and IdfObject

For IddObject, removed unnecessary allocation.

For IdfObject, changed iddObject() to m_iddObject where possible since
iddObject() returns m_iddObject anyways. This avoids a temporary
allocation of IddObject for the function call.

Also very slightly changed order of name() and double calls of
stringDefault.
Optimize Workspace and WorkspaceObject

This has many changes from big to small to speed up performance. The
bigs ones are the change of m_iddObjectTypeMap to map<IddObjectType,
map<handle, object_ptr>> to speed up searching for objects.

This also gets rid of the regexes to search for baseName and the
suffix. It now uses std library functions and char searching, resulting
in a MUCH faster name creation.

I think there may be a bug in this implementation within reverse
translation or forward translation since my test program has an E+
runtime error. However, this passes all model, utilities, and
energyplus unit tests.
Merge branch 'develop' into Optimizations

Conflicts:
	openstudiocore/src/model/ZoneHVACBaseboardConvectiveElectric.cpp
	openstudiocore/src/model/ZoneHVACBaseboardConvectiveWater.cpp
	openstudiocore/src/model/ZoneHVACLowTempRadiantConstFlow.cpp
	openstudiocore/src/model/ZoneHVACLowTempRadiantVarFlow.cpp
	openstudiocore/src/model/ZoneHVACLowTemperatureRadiantElectric.cpp
	openstudiocore/src/sdd/ReverseTranslator.cpp
	openstudiocore/src/utilities/idf/Workspace.cpp
Fix merge conflicts

Conflicts:
	openstudiocore/src/model/ZoneHVACBaseboardConvectiveElectric.cpp
	openstudiocore/src/model/ZoneHVACBaseboardConvectiveWater.cpp
	openstudiocore/src/model/ZoneHVACLowTempRadiantConstFlow.cpp
	openstudiocore/src/model/ZoneHVACLowTempRadiantVarFlow.cpp
	openstudiocore/src/model/ZoneHVACLowTemperatureRadiantElectric.cpp
	openstudiocore/src/sdd/ReverseTranslator.cpp
	openstudiocore/src/utilities/idf/Workspace.cpp
A few more optimizations

This fixes a few failing unit tests and E+ runtime error.

component(), demandComponent(), and supplyComponent() within Loop all
return the object immediately if the handles match now instead of
looping through all components then matching handles.

The big time saver in this bunch is the new istringEqual
implementation. Instead of using boost::iequals(), it now uses size
checking and std::equal with individual char checking. In my test
program, istringEqual went from 1270ms->302ms total time for all calls.
Remove commented code
Optimize constructNextName further

Allocating, deallocating, and inserting into a std::set takes almost
twice as long as allocating, deallocating, push_back, sort, and erase
from a vector<>. The result is the same, a container with unique int
values.
Merge branch 'develop' into Optimizations

Conflicts:
	openstudiocore/src/energyplus/ForwardTranslator.cpp
Fix merge conflict

Conflicts:
	openstudiocore/src/energyplus/ForwardTranslator.cpp
Revert getObjectsByType(const IddObject& objectType)
Merge branch 'develop' into Optimizations
Change m_idfReferencesMap implementation

This reverts WorkspaceObject to use getObjectsByReference() again.

This also changes IdfReferencesMap to use WorkspaceObjectMap instead of
HandleSet, similar to the change in implementation for IddObjectTypeMap.
Merge branch 'develop' into Update_python
Merge branch 'develop' into Update_python