Ernst oop etc layers

Situation
-----------
Layers were having a lot of if else ladders.

Problem
----------
We did not have a layer class that could operate as a *interface* between different layer types.

Action
--------
- [x] Create abstract layer class
- [x] Create specific layer type classes that implement these classes