real fix for broken Entering logs

the port from javascript didn't translate the javascript `map` into the python world properly

Fixes #10
diff --git a/src/composer/composer.py b/src/composer/composer.py
index ba35e92..324694b 100644
--- a/src/composer/composer.py
+++ b/src/composer/composer.py
@@ -74,12 +74,12 @@
 
         combinator = combinators[getattr(self, 'type')]
         if 'components' in combinator:
-            self.components = tuple(map(lambda c: f(c, None), self.components))
+            self.components = [f(c, str(idx), True) for idx,c in enumerate(self.components)]
 
         if 'args' in combinator:
             for arg in combinator['args']:
                 if 'type' not in arg:
-                    setattr(self, arg['_'], f(getattr(self, arg['_']), arg['_']))
+                    setattr(self, arg['_'], f(getattr(self, arg['_']), arg['_'], False))
 
 
 def get_value(env, args):
@@ -315,7 +315,7 @@
         ''' recursively deserialize composition '''
 
         composition = Composition(composition)
-        composition.visit(lambda composition, name: self.deserialize(composition))
+        composition.visit(lambda composition, name, ignore=False: self.deserialize(composition))
         return composition
 
     def label(self, composition):
@@ -325,13 +325,12 @@
             raise ComposerError('Invalid argument', composition)
 
         def label(path):
-
-            def labeler(composition, name, array=None) :
+            def labeler(composition, name, array=False):
                 nonlocal path
                 composition = Composition(composition)
                 segment = ''
                 if name is not None:
-                    if array is not None:
+                    if array:
                         segment = '['+name+']'
                     else:
                         segment = '.'+name
@@ -362,7 +361,7 @@
         # if isinstance(combinators, str): # lower to combinators of specific composer version
         #     combinators = Object.keys(this.combinators).filter(key => semver.gte(combinators, this.combinators[key].since))
 
-        def lower(composition, name):
+        def lower(composition, name, ignore=False):
             composition =  Composition(composition) # copy
             # repeatedly lower root combinator
 
@@ -525,7 +524,7 @@
         def escape(str):
             return re.sub(r'(\n|\t|\r|\f|\v|\\|\')', lambda m:{'\n':'\\n','\t':'\\t','\r':'\\r','^\f':'\\f','\v':'\\v','\\':'\\\\','\'':'\\\''}[m.group()], str)
 
-        def encode(composition, name):
+        def encode(composition, name, ignore=False):
             composition = Composition(composition)
             composition.visit(encode)
             if composition.type == 'composition':
diff --git a/src/composer/conductor.py b/src/composer/conductor.py
index eb11bd8..c9fd247 100644
--- a/src/composer/conductor.py
+++ b/src/composer/conductor.py
@@ -100,10 +100,16 @@
     isObject = lambda x: isinstance(x, dict)
 
     def encodeError(error):
-        return {
-            'code': error['code'] if isinstance(error['code'], int) else 500,
-            'error': error['error'] if isinstance(error['error'], str) else (error['message'] if 'message' in error else (error if isinstance(error, str) else 'An internal error occurred'))
-        }
+        if isinstance(error, str) or not hasattr(error, "__getitem__"):
+            return {
+                'code': 500,
+                'error': error
+            }
+        else:
+            return {
+                'code': error['code'] if isinstance(error['code'], int) else 500,
+                'error': error['error'] if isinstance(error['error'], str) else (error['message'] if 'message' in error else 'An internal error occurred')
+            }
 
     # error status codes
     badRequest = lambda error: { 'code': 400, 'error': error }
@@ -214,8 +220,8 @@
 
             # process one state
             jsonv = fsm[state] # jsonv definition for current state
-            if hasattr(jsonv, 'path'):
-                print('Entering composition'+jsonv.path)
+            if 'path' in jsonv:
+                print('Entering composition'+jsonv['path'])
             current = state
             state = current + jsonv['next'] if 'next' in jsonv else None # default next state
             if jsonv['type'] == 'choice':