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 Stream, typename Operation>
inline size_t SerializationOp(Stream& s, Operation ser_action, int nType, int nVersion) {
    /* CODE */
}
```
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 = ser_action.ForRead();
```
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.