Fix for clang warnings on struct/class mismatch
Fixed narrowing bug in bind with clang
split tinympl into fine-grained headers

1. The headers `algorithm.hpp`, `algorithm_variadic.hpp` and
   `variadic.hpp` are split into series of small headers, one header per
   class.

2. Eliminated most of the stuct/class missmatches. If we had

        template<...> struct foo { };

   and its specializations such as

        template<...> class foo<...> { };

   then clang complained. Now all the declarations and specialization
   use `struct`. The clang should be calm and quiet.

4. Added unit testing infrastructure under `tets/` directory. Each
   header now has its corresponding unit test file under test/tinympl.
   We use Boost.Test framework to generate test runner code. Unit tests
   are currently empty, but may be filled-in systematically. Currently
   they just include corresponding headers to test inter-header
   dependencies. The old testing infrastructure under `examples/`
   is still here.