trie based Mask - will represent deleted branches
refactor: renamed mask node "colors"
refactor: extracted magic constants from tests
Merge branch 'feature/delete-mask' into feature/overlay2
Trie.has_content & .is_internal handles non-existent paths
tests: root need not exist
memory: root does not exists initially
nonexistent external raises NoContentError on read
Overlay: read .content & .delete
writable Overlay.content
cleanup: use @property properly instead of st2 snippet magic
External.exists is no longer abstract
.is_file, is_dir
.{read,writ}able_stream
Overlay.children()
External.copy_to
Merge branch 'feature/overlay'