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).
OK I see your point, indeed it is possible to declare a point and do (probably nothing) with it.
I prefer your version with the constructor. Because it is a declaration only, it is zero-time.
You can probably also declare a non-used member variable in the class itself.

Another way (more work) is that we define a Concept for all spherical-based coordinate systems, and one of the rules is that the units are degree/radian. We can then perform a concept check. I don't know if we should really do this, maybe it is going too far. So let's not do that now but we can keep it in mind.