- intersections
  - concept:
    - Math::Geometry::Construction::Intersection has code to accept
      two (or more?) objects and dynamically applies the appropriate
      role, e.g.
      Math::Geometry::Construction::Intersection::CircleLine.
    - It also consumes PointSelection.
    - The roles provide the points method and possibly more point
      selection methods.
    - Math::Geometry::Construction::IntersectionPoint contains code
      to hold the Intersection object, the point selection method to
      call and its parameters. This is executed when the position
      method is called.

- On creation of an intersection point, it should be added to the
  lists of POIs of the intersecting objects. The user should be able
  to inhibit this. I am unsure how he should be able to inihibit it
  specifically for some of the objects. Maybe I won't allow
  this. Anyway, it is planned to let objects ignore points. It can
  always be done very specifically this way.

- update strategy
  - points buffer their position
  - whenever an object changes something that affects downstream
    objects it notifies the construction object
  - the construction object saves the lowest order index that has
    changes
  - whenever a point would like to access its buffered value it asks
    the construction object if it is still uptodate
  - if the order index of the asking object is higher than the last
    change then a refresh is triggered; either a refresh of the
    required range (that would require a list of changed objects, -
    not just the lowest one) or a full refresh (that would probably
    not be too expensive)
  - a refresh can be executed by just updating all objects
    sequentially since an object can only depend on objects with -
    lower order indices (I hope this is really true, but I cannot -
    come up with a scenario where this restriction would be too -
    harsh).

- Work out if points really can be undefined. What is returned from
  a point selector can be undefined, but can the support points of
  object be undefined? They are either real points or derived
  points. Even if a derived point turns out not to exist, the
  depending object has only a reference to the DerivedPoint object
  and that is defined. It will deal with the undefined point and
  return a undefined position.
