Introduced detail namespace for helper objects
* Moved BasePtr into separate header inside the detail namespace as it is a implementation detail of Tuple which doesn't need to be directly exposed to the user
* Got rid of unnamed namespace in utility.h and moved contents into detail namespace
** the usage unnamed namespaces was based of a misconception I had about how they are defined in the standard
** unnamed namespaces do not fullfill the purpose I intended for them when used inside header files as they of course are not separate compilation units