Restructure reclass into a Python module

By moving all code into ./reclass/, reclass can now be used as a Python
module. The Ansible adapter and the CLI have been updated accordingly.

Signed-off-by: martin f. krafft <madduck@madduck.net>
diff --git a/reclass/storage/yaml_fs/yamlfile.py b/reclass/storage/yaml_fs/yamlfile.py
new file mode 100644
index 0000000..14bee86
--- /dev/null
+++ b/reclass/storage/yaml_fs/yamlfile.py
@@ -0,0 +1,51 @@
+#
+# -*- coding: utf-8 -*-
+#
+# This file is part of reclass (http://github.com/madduck/reclass)
+#
+# Copyright © 2007–13 martin f. krafft <madduck@madduck.net>
+# Released under the terms of the Artistic Licence 2.0
+#
+from reclass import datatypes
+import yaml
+import os
+
+class YamlFile(object):
+
+    def __init__(self, path):
+        ''' Initialise a yamlfile object '''
+        self._path = path
+        self._data = dict()
+        self._read()
+    path = property(lambda self: self._path)
+
+    def _read(self):
+        fp = file(self._path)
+        data = yaml.safe_load(fp)
+        if data is not None:
+            self._data = data
+        fp.close()
+
+    def _get_entity(self):
+        classes = self._data.get('classes')
+        if classes is None:
+            classes = []
+        classes = datatypes.Classes(classes)
+
+        applications = self._data.get('applications')
+        if applications is None:
+            applications = []
+        applications = datatypes.Applications(applications)
+
+        parameters = self._data.get('parameters')
+        if parameters is None:
+            parameters = {}
+        parameters = datatypes.Parameters(parameters)
+
+        return datatypes.Entity(classes, applications, parameters,
+                                name=os.path.basename(self._path))
+    entity = property(lambda self: self._get_entity())
+
+    def __repr__(self):
+        return '<{0} {1}, {2}>'.format(self.__class__.__name__, self._path,
+                                       self._data.keys())