Remove normalize_settings from table and container

This patch amend the settings system to remove some of its limitation : 

- Settings in containers was normalized into a complete form. This normalization had various issues : 
   - it required calling a O(N²) meta-function
   - it required to be modified every time a new settings type was added
   - symbol names of container were arbitrary long
  
This PR remove the need of normalization by imbuing container kind (table_, etc) to fulfill the request of default settings. Every call to normalize were removed and replaced by a proper kind-based call to options.

- Container *kind* is now computed and a proper entry-point called deduce_semantic has been added so, like for value_type and size, any function can decide its own kind of container. This is needed later on to support proper matrix/vector container with proper semantic on operator  '*'. By default, the kind is computed as the most specialized kind in the list of arguments kind.

- Options system has been amended to use a proper generic add_setting system that properly try to keep settings type short. New settings are now added on the *front* instead of the back to speed up compile time of settings look-up. 

- Every option type has a proper type protocol to access its value, making possible to have one option type fulfill different options at the same type. To do so, we split *registering* a type as an option from extracting its option value