Fixed problem resulting from inconsistencies between clang and g++
* the C++ standard is not clear on the issue if default template arguments are only instantiated when needed
** the clang implementation only instantiates them if they are needed which is why the way I disabled the serialize and deserialize template methods worked in clang
** the g++ implementation instantiates them which led to an compiler error
** corresponding core language issue: http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#1635
* for the time being the serialize and deserialize methods will rely on static_assert for overload resolution exclusion
* if the standard committee decides that default template arguments are only instantiated when needed I will switch back to the old implementation as I find it to be nicer