Add support for preprocessor variadic macros and convert vector_type
flatten supports variadic macros, and move details to different header.

no reason to have all of the flatten implementation details being wrapped
in lots of boost preprocessor ifdefs, so move to separate header
Make the join functions a unique header
Update views.h to use new join api which works around gcc 4.6 bugs.
Working on converting all code to support pre-processor variadic args