Optimize boolean operations

 * Implement lazy initialization of members in IntPolyh_MaillageAffinage, as described by Roman Lygin in http://opencascade.blogspot.fr/2008/12/why-are-boolean-operations-so-sloooooow.html
 * Add a new map member in BooleanOperations_ShapesDataStructure.hxx to store shape indices of newly created shapes.  `GetIndex()` in BOP_SolidSolid_1.cxx uses this map instead of iterating over all new shapes, which is much faster when this collection is large.
 * Change `ComputeStateByInsidePoints()` arguments in BOP_SolidSolid_1.cxx to avoid a loop on theFFMap.  This loop was used only to retrieve the right index, so this change was not critical, but it makes sense.
 *  Add a new method `DoEdgesAdjacentFaces()` in BOP_SolidSolid_1.cxx to precompute the list of adjacent faces of all edges.  It was previously computed during `GetAttachedFaces()`, which iterated over all new faces, and this method was called for all edges of all faces.
 * In `BOP_SolidSolid::PrepareFaceSplits()`, `ComputeStateByInsidePoints()` is called to determine face state, then `ComputeStateForAnalyticalSurfaces()` if state is undefined.  The former has a higher complexity than the latter, but is faster on small cases.  Now if more than 100 shapes are involved, these calls are performed in the opposite order.  Otherwise, nothing is changed.
 * `BOP_WireEdgeSet::IsClosed()` is bogus, it always return false, but sometimes after lots of unused computations.  So let it return false immediately.
 * In `BOP_FaceBuilder::PerformAreas()`, precompute the set of edges for each face so that it does not have to be computed during an inner loop in `IsInside()`.  Unfortunately, this requires adding TopTools_DataMapOfShapeMapOfShape data structure.
 * ... and many other minor improvements.