Add way to swallow spurious warnings

Two files are provide:
  - detail/disable_warnings.hpp,
  which stores the user warnings, and disable some of them, and
  - detail/re_enable_warnings.hpp,
  which restores the user warnings.

These files are ment to be included multiple times.

They disable spurious warnings for a code block between
disable_warnings.hpp and re_enable_warnings.hpp

Currently GCC and clang are supported, and Wshadow is the only warning
swallowed in the algorithm.hpp and view.hpp headers.

Support for other compilers/warnings can easily be added.

Rationale: it is better to swallow spurious warnings produced by broken
compilers or insane warning configurations than to waste time modifying
valid and correct code.