Handle errors consistently in collection item copy/remove/rename/add

Errors were handled via exceptions and return code before.
Handle all errors via exceptions now.
Handle errors with exceptions instead of return code
Remove unused clear() method from collection base class
Remove unused deserialize_* methods

Only deserialization methods kept were deserialize(), used to
load all collections from disk, and deserialize_raw(), used
internally in classes which implement serializer interface.
Rename obj param to collection in serializer functions

Obj is a confusing term because at first sight it seems
obj is a collection item. However, obj is a collection
in this context.

Also, improve serializer classes documentation.
Remove code that checks if serialize_delete() and serialize_item() exist

All serializer classes currenly implement these methods.
If a specific serializer in the future is unable to save/delete
one item, then the specific serializer should handle the
workaround, not the base serializer class.
Remove unused main code from serializer base class
Do not serialize settings collection in serializer subclasses

Only file / CouchDB serializers were checking if collection type
was settings before, added the check to mongodb serializer
subclass.
Rename hash to dict

Part of the code used 'hash', part of the code used 'dict' to
reference Python dictionaries. This patch standardizes those
references.
Remove unused inplace parameter
Remove methods which create items from Config class

To keep code simpler, item creation should always be done
using the same method. Currently, there are 2 ways to create
an item: creating it directly or using Config class. The
purpose of this patch is to eliminate one of those and make
item creation more consistent.

There is no gain in keeping item creation in config class,
as it only creates the item, it does not do anything
additional such as adding the item to its respective collection.
Rename datastruct to correct data structure name

data structure is a generic name and could mean an object,
a dict, a list, etc. It is similar to name a variable 'var'.
Rename datastruct and make code easier to understand.

With same motivation, rename some obj instances to item.
Drop support to Python 2.3 in item.py
Rename BootSync, BootLiteSync, BootStatusReport and BootCheck classes

'Cobbler' makes more sense than 'Boot'.
Rename printable() to to_string()

Latter is more consistent with other methods names and it is easier to understand.
Remove unused get_methods_from_fields() method
Remove return value from from_dict()

from_dict() method already fills Cobbler item with dictionary data,
so it does not need to return itself. It was only done before to
allow the concatenation of method calls in factory_produce().
The new code is easier to read and maintain.
Rename methods that get items setters

Old names reflected where the methods were used (remote.py).
New names reflect methods purpose, decreases coupling and
makes code easier to understand.