Fix an error with trackers not set properly. Use port argument for slaves.
Use the "proper" set_*_method in combiner and splitter for creating job.
Make Job inherit from the new Serializable class.
Change some of the Job-handling in Master because it's Serializable now.
Use the new serialization methods in Messenger.
Fix the .gitignore for vim temp files.
Use id attribute instead of taskunit_id for TaskUnit class.
Raise a (meaningful) exception if no machines available to schedule.

Also, add a slot in the assignments dict for the new machine on
add_machine().
Add recursive serialization and method caching.

Everytime a method is deserialized, a copy of it is stored in the
__cache__ directory in case it is needed again. This also helps with
importing it in such a way that the source can be accessed again.

Recursive serialization is implemented by enabling a recursive_serialize
flag when initializing Serializable and for each attribute that inherits
from Serializable, we also serialize it if recursive_serialize is True.

TODO: Implement a cache() method which the user of the serialization
methods can call to cache the methods if required.
Add a size() method to Heap.
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.