[Feature] Binary: Container

Refactor `binary.py: Container` and update its API.
The new code aims to be more object-oriented and readable.

A `Container` stands for an abstraction of a file format such as PE or ELF.
When instancing a `Container`, from a stream (`.from_stream`) or a string (`.from_string`), an instance of a `Container` subclass is returned.

Subclass implemented are:
- `ContainerPE`: stands for a PE
- `ContainerELF`: stands for a ELF
- `ContainerUnknown`: fallback mode

Containers expose:
- `.bin_stream`: BinStream instance corresponding to container content
- `.executable`: abstract instance standing for parsed executable
- `.entry_point`: detected entry_point (if any)

`test_dis.py` and `disasm03.py` examples have also been updated.

To add a new container format, use `Container.register_container(CLS)` with *CLS* implementing a method `parse`.
To change the fallback container file format, use `Container.register_fallback`.