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).
It depends on the level of type checking you want to do.
If you want to disallow BG points with wrongly defined coordinate systems to be even defined then something has to be done within BG point.
One alternative is to write the constructor as follows:
```
inline point()
{
  CoordinateSystem cs;
  boost::ignore_unused(cs);
}
```
and similarly for the other constructor. This will have the same checking effect. Probably not a good idea though.

If you consider this as too much, then we can simply leave point as it is and rely on other places in the library to trigger the check. If we leave point as it is (without derivation), it would be possible to write what I wrote in my initial comment above. But then once you use this point in an algorithm, you almost certainly get a compile time error.

Again, it really depends on the level of checking we want to do. I would be okay with leaving the point class as it is.