cleaner serialization code

The implementation of each class' serialization/deserialization is no longer passed within a macro.
The implementation now lies within a template of form:
```
template <typename T, typename Stream, typename Operation>
inline static size_t SerializationOp(T thisPtr, Stream& s, Operation ser_action, int nType, int nVersion) {
    size_t nSerSize = 0;
    /* CODE */
    return nSerSize;
}
```
In cases when codepath should depend on whether or not we are just deserializing
(old **fGetSize**, **fWrite**, **fRead** flags) an additional clause can be used:
```
bool fRead = boost::is_same<Operation, CSerActionUnserialize>();
```
The **IMPLEMENT_SERIALIZE** macro will now be a freestanding clause added within class' body
(similiar to Qt's **Q_OBJECT**) to implement **GetSerializeSize**, **Serialize** and **Unserialize**.
These are now wrappers around the **SerializationOp** template.