Make Layout abstract

What this MR does:
* Makes `Layout` a `ABCMeta`;
* Decorates some of its methods with `@abstractclass`, that must be implemented in every layout;
* Implements those abstract methods on layouts that don't already have them;
* Slightly standardize layouts implementation.

Why?
* So by looking at `layout.py`, we can know easily what methods can be used safely everywhere else, and are valid for every layout;
* Because forcing the layout creator to develop some predefined standard function means giving the work to the person who knows its code, since layouts implements can be very different from one layout to another;
* Because if a function is vital but not implemented, it does not wait that the function is called to raise an exception.

All tests are passing.