common: Add messages for handling global IO limits

This patch adds LIZ_<MATOCL|CLTOMA>_IOLIMIT* messages that will be used
in the global IO limiting mechanism. It also adds some tools that were
needed to implement these messages, concerning serialization and unit
testing.

Closing #152
common: Fix string and vector<string> seralization

There was a bug in serialization of std::string and
std::vector<std::string>, which (depending on an architecture) may led
to serializing field length as a 64 bit variable, while it was always
deserialized as a 32 bit variable.
metarestore: Improve automatic recovery

Before this commit mfsmetarestore -a was not always very safe. Consider
the following scenario:
* Run both the master server and a metalogger on the machine and use it
* Stop the metalogger
* Use the filesystem for one year
* Stop the master server (mfsmaster stop)
* Run mfsmetarestore -a. It will recover metadata from one year ago and
  overwrite your metadata.mfs

mfsmetarestore -a will now try to find the best metadata file, which
will be used to apply all the found changelogs. It will never overwrite
newer metadata with any older version. After such a change
calling mfsmetarestore -a should always be safe and also should be the
best choice if one wants to recover the filesystem's metadata.
tests: Add a test of mfsmetarestore -a

This test verifies if the call 'mfsmetarestore -a' generates a valid
metadata file in many possible cases, eg. when metalogger's data is
newer than the master's data, or otherwise.
common: Add macro for generating serializable classes

Add a macro that defines a class, that has automatically generated
methods for serialization. Due to the genericness of this
implementation, there is no need to implement a unit test that
checks if serialization works fine for objects created with use
of this macro.

The macro should be used like this:

include "common/serializable_class.h"

SERIALIZABLE_CLASS_BEGIN(MyClassName : public SomeBase)
SERIALIZABLE_CLASS_BODY(
    MyClassName,
    int   , fieldA,
    double, fieldB,
    long  , fieldC
)
    // Macro doesn't close class definition bracket, so we can provide
    // any additional code we want:
    MyClassName() = default; // Like a constructor
    void myMethod() {
        fieldA_ = 5; // We can also use class fields using underscore
    }
SERIALIZABLE_CLASS_END

int main() {
    MyClassName a = MyClassName(0, 1.0, 2l); // A tuple-like
                            // constructor is also generated
    std::vector<uint8_t> buffer;
    serialize(buffer, a);
}

Change-Id: I3bd3f1e1ed2111f89aa9561c0d1571d5e424b23a
common: Reorganize code serializing vectors

LizardFS does send vector length when serializing it, MooseFS does
not. This patch provides code needed to do both types of serialization.
tests: Fix name of one unit test file

Because of this wrong name the code didn't compile with tests
turned off.