little refactor on shaps structure:
Introduced Shape as an interface and renamed the class previously named
Shape to ShapeComposite.

Modified classes implementation according to the new architecture.

Added more methods documentation.