[OCCT] 0023548: Boolean operation between two faces fails

  Cherry-picked from
    http://git.dev.opencascade.org/gitweb/?p=occt.git;a=commit;h=d642ddf
Adapt header files after previous commit
Remove TStartPoints, this member is never used
Lazy initialization of TPoints/TEdges/TTriangles collections

Patch suggested by Roman Lygin, see
  http://opencascade.blogspot.fr/2008/12/why-are-boolean-operations-so-sloooooow.html
Use a map also for inserted shapes

GetIndex() method becomes very slow if there are many new shapes.
Optimize ComputeStateByInsidePoints

Pass aFFIndicesMap instead of aFFMap as argument in order to avoid
the for-loop on i.
Add a new method BOP_SolidSolid::DoEdgesAdjacentFaces

This method computes the list of adjacent faces of all edges.
It was previously computed by GetAttachedFaces, which iterated over all faces.
With large models, exchange calls to ComputeStateByInsidePoints() and ComputeStateForAnalyticalSurfaces()

The former loops over all shapes, and becomes thus slow with large models.  On
the other hand, the latter is inherently slower, but does notdepend on shape complexity.
The current implementation of BOP_WireEdgeSet::IsClosed() is broken

It always return Standard_False, so speed it up ;-)
Optimize for loops
Perform computations outside of the for-loop
In BOP_BuilderTools::DoMap, avoid resizing aFFMap at each iteration
Pass aFFIndicesMap as argument of BOP_ShellSolid::SplitFace in order to not compute this map again
Improve BOP_FaceBuilder::PerformAreas by precomputing the set of edges for each face

Unfortunately, this requires adding TopTools_DataMapOfShapeMapOfShape data structure.