A layout manager is a class that takes an area of usable space and a list of components to fit on that space. This
is very similar to how AWT/Swing/SWT works. Lanterna contains a number of layout managers built-in that will arrange
components in various ways, but you can also write your own. The typical way of providing customization and tuning,
so the layout manager can distinguish between components and treat them in different ways, is to create a class
and/or objects based on the LayoutData object, which can be assigned to each Component.
Given a size constraint, update the location and size of each component in the component list by laying them out
in the available area. This method will call setPosition(..) and setSize(..) on the Components.
area - Size available to this layout manager to lay out the components on
components - List of components to lay out
Returns true if the internal state of this LayoutManager has changed since the last call to doLayout. This will
tell the container that it needs to call doLayout again.
true if this layout manager's internal state has changed since the last call to doLayout