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).
This will work but I'm not in favor of deriving the class for the sake of testing only. If we extend this we get multiple inheritance, etc, while inheritance is effectively not used at all here.

It should be possible to check in another way too, e.g. defining a private class-type doing this check