Use TrillekAllocator where it is useful

Replace unique_ptr by shared_ptr because unique_ptr does not support
allocators.
Refactor code
Create a SharedComponent class to store all shared components
Use Container class everywhere

Also add Container::GetSharedPtr<T>(const std::shared_ptr<Container>&) function
to get a shared_ptr<T> as an alias of the one passed as argument.
Add perfect forwarding to Container