Added a layer supertype for immutable objects
Merge branch 'issue49-immutable' into issue49