Significant tidy up of some traits

In cereal.hpp, replaced the enable_if for the output archive with a macro that does
all of the checks, which makes things look much nicer.

To enable this macro, refactored some code in traits.hpp so that we can now query
individual serialization function types to see whether they have been specialized.