use boost tuples and tie to change internals to be more functional.

ran into an issue using std::tuple with boost::simd, clang and libstdc++, so using boost tuple for now.