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).
I do not want to add a member variable; it will take space. This was one reason why I initially chose to derive, having in mind empty base class optimization.
The typedef seems like a good alternative. If I can make it to work, I will prefer this.

I agree with the concept check idea. Let's, indeed, leave this for later.