Implement compatibility with 3rd party 3D point classes.

Required guarding many functions with SFINAE.
Requirements of 3rd party points:

Basic functionality:

* type value_type
* members x(), y(), z() returning value_type or lvalue reference thereof
* data access via operator[]
* constructor taking x, y, z values

Optional:

* equality operator
* ostream& operator<<