Hi,

I propose to change the interface of area strategies to make them easier to use, make template parameters independent of PointOfSegment and make them consistent with other strategies in the following way:
- remove PointOfSegment template parameter
- replace return_type typedef with member class template, and then in algorithm replace:
      typename Strategy::return_type
  with
      typename Strategy::template result_type<Geometry>::type
- replace state_type typedef with member class template, and then in algorithm replace:
      typename Strategy::state_type state;
  with
      typename Strategy::template state<Geometry> state;
- add bg::area_result<Geometry, Strategy> metafunction simplifying the definition of area's result-type, so similar to already existing bg::default_area_result<Geometry>, then this:
      typename Strategy::template result_type<Geometry>::type
  is simplified to:
      typename area_result<Geometry, Strategy>::type
- in spherical area strategy add either of these template parameters:
  - RadiusType like in haversine distance strategy (defaulting to double)
  - Sphere like in geographic strategies taking Spheroid (defaulting to bg::srs::sphere<double>)
- rename bg::strategy::area::surveyor to bg::strategy::area::cartesian

After these changes the user would be able to write:

auto a = bg::area(g1, bg::strategy::area::cartesian<>());
auto b = bg::area(g2, bg::strategy::area::spherical<>()); // probably unit sphere to be backward compatible with default-constructed spherical strategy
auto c = bg::area(g3, bg::strategy::area::geographic<>()); // WGS84, default srs::spheroid

auto d = bg::area(g1, bg::strategy::area::cartesian<>());
auto e = bg::area(g2, bg::strategy::area::spherical<>(6370997.0)); // Earth's mean radius, or instead of Radius take Sphere
auto f = bg::area(g3, bg::strategy::area::geographic<>(bg::srs::spheroid<double>(6378206.4, 6356583.8))); // Clarke 1866

What do you think?

Adam