We need the expected size of the new cell to do it correctly, and that
would introduce an inconsistency between up/left and the existing row/col
functions.
When moving down/right, we use the old cell size because we are moving
the start point outside of the existing cell. When we go up/right, we
are doing actually doing the inverse operation, moving backwards using
the new cell size. We still check to see if there's an old cell because
up()/down()/left()/right() should behave the same for the first cell.
up() places the next cell above the previous one, and left() places the
next cell to the left of the previous one. down() and right() are
aliases to row()/col(), for symmetry.
Also added are nextX() variants for function.
Previoysly, padding was added before adding a cell, which lead to
incorrect and unaligned cell placement in nested layouts.
Now padding is only added when at least one cell has been placed before.
Revert signature if layout:push(x,y, padx,pady) to layout:push(x,y)
Makes it possible to use the idiomatic layout:push(layout:row()) again.
(layout:row() returns x,y, w,h of last cell)
Remove layout:pos([x,y]) because it's not needed and potentially confusing.