break circular include (#237)

* include registration: add failing unit test

* include registration: break circular include loop

otherwise, when a user include directly this header without fwd.hpp, as
in the include.cpp regression test:

Dans le fichier inclus depuis ../include/eigenpy/fwd.hpp:35,
                 depuis ../include/eigenpy/registration.hpp:9,
                 depuis ../unittest/include.cpp:7:
../include/eigenpy/expose.hpp: Dans la fonction « void eigenpy::expose() »:
../include/eigenpy/expose.hpp:27:9: erreur: « register_symbolic_link_to_registered_type » n'a pas été déclaré dans cette portée
   27 |     if(!register_symbolic_link_to_registered_type<T>())
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../include/eigenpy/expose.hpp:27:52: erreur: expected primary-expression before « > » token
   27 |     if(!register_symbolic_link_to_registered_type<T>())
      |                                                    ^
../include/eigenpy/expose.hpp:27:50: attention: le non logique est toujours appliqué au membre de gauche de la comparaison [-Wlogical-not-parentheses]
   27 |     if(!register_symbolic_link_to_registered_type<T>())
      |                                                  ^
../include/eigenpy/expose.hpp:27:54: erreur: expected primary-expression before « ) » token
   27 |     if(!register_symbolic_link_to_registered_type<T>())
      |                                                      ^
9 jobs for pr/238 in 10 minutes and 32 seconds (queued for 2 seconds)
latest
Status Name Job ID Coverage
  Test
passed doc-coverage #121470

00:10:30

76.0%
failed format #121471
allowed to fail

00:00:29

passed robotpkg-py-eigenpy-py2-18.04-release #121465

00:06:32

passed robotpkg-py-eigenpy-py3-16.04-release #121463

00:10:08

passed robotpkg-py-eigenpy-py3-18.04-release #121464

00:09:32

passed robotpkg-py-eigenpy-py3-20.04-release #121466

00:02:36

passed robotpkg-py-eigenpy-py3-buster-release #121467

00:09:37

passed robotpkg-py-eigenpy-py3-ferrum-release #121468

00:05:19

passed robotpkg-py-eigenpy-py3-stretch-release #121469

00:10:31

 
Name Stage Failure
failed
format Test
./benchmarks/bench-switch.py:6:1: F401 'time' imported but unused
./benchmarks/bench-switch.py:7:1: F401 'timeit' imported but unused
./benchmarks/bench-switch.py:53:24: E703 statement ends with a semicolon
./python/eigenpy/__init__.py:17:1: F403 'from .eigenpy import *' used; unable to detect undefined names
./python/eigenpy/__init__.py:17:1: F401 '.eigenpy.*' imported but unused
./python/eigenpy/__init__.py:18:1: F401 '.eigenpy.__version__' imported but unused
./python/eigenpy/__init__.py:18:1: F401 '.eigenpy.__raw_version__' imported but unused
Cleaning up file based variables
ERROR: Job failed: exit code 1