bitcoin/bitcoin — pull request #4737 by kdomanski (2014-08-20 16:39:33+00:00)
Title: 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
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();
```
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.