Adding access to members during allocate

Moving code around a bit, allocate is now in access.hpp which seems
to make a bit more sense.  Exception is now in helpers.hpp.

It is now possible to use a cereal::allocate<T> object to directly
access member variables or functions after it has been initialized.
Accessing them before initialization will throw as will performing
a double initialization.

see #46