Cleanup
Optionally don't raise ValueError

Added `raise_if_not_found` keyword argument to `remove_*` functions - if False, don't raise ValueError if rule/subfilter already exists.
Minor clarification
Add to_lowercase parameter to get_file_extension
Cleanup
Don't remove '.' when validating
Major refactoring

* Removed layer caching (no longer used).
* Removed `uniquify_layer_names`. Added `uniquify_layer_name` instead, which uniquifies one `_LayerDataElement` at a time.
* `_LayerDataElement`: All attributes except `layer_name` are now read-only.
* `_LayerDataElement`: Removed `is_empty` and `is_group` and instead added `layer_type`
* `_LayerDataElement`: Removed `file_extension` property, added `get_/set_file_extension` methods instead.
* `_LayerDataElement`: Added `parent` property.
* `_LayerDataElement`: `validate_name` now validates parents as well.
* Unit test: Parse layer tree from a docstring, which is much more readable and easier to maintain.
* Misc. cleanup.