Fix/strong type checking for cs template parameter

Implement a strict type checking mechanism for the template parameter of the non-Cartesian coordinate systems. The goal is to allow the instantiation of `bg::cs::spherical<T>`, `bg::cs::geographic<T>`, etc., only when `T` is either `bg::degree` or `bg::radian`.

Note that, even with the stronger type checking mechanism mentioned above, since the coordinate system is never really created when a `bg::model::point<>` is created, it is possible to write something like:
```
bg::model::point<double, 2, bg::cs::geographic<double> > p;
```
By making `bg::model::point<>` derive privately from the coordinate system, the above syntax is no longer accepted (see second commit).
Agreed. If we check the coordinate system in the PointConcept check, we're there. All algorithms (at least: that is the intention) check geometry concepts. So the check is then OK for our point-type and user-defined types.

I think you can therefore leave the point class as it is now, no check necessary (though a typedef would not do any harm)