MetaScale/nt2 — pull request #467 by jfalcou (2013-06-26 18:58:28+00:00)
Title: 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