Implement recursive (de)serialization of classes not in scope.

Every instance of a class Foo in module2 which is in module1 and so on
is serialized like so:
{
  'class': 'module1.module2.Foo',
  'attrs': {
             'name': 'bar',
             'size': 10,
             ...
           }
}
Upon deserialization, the class Foo is imported into global scope from
module1.module2. Then it is initialized with all the mandatory
arguments and all the optional arguments that are available. It should
be noted though that for every argument mandatory x used to initialize
an object foo, foo.x must exists and be the same as the one passed in
during initialization for the two objects to be guranteed to be
identical. Should make a note of this somewhere.
TODO: Add an additional argument to deserialize() method or an argument
to Serializable.__init__() to determine whether to initialize a new
object with arguments or to just create an empty object and inject
the attributes afterwards.