Rewrite OO.ui.Element.getRelativePosition() to be smarter

We had complicated logic to compute intra-frame relative positions
in TextInputMenuWidget, which is really not where it belongs.
Put this logic in getRelativePosition() instead, so it's reusable.

Also generalize the logic so it doesn't require .$iframe
and can deal with multiple levels of nested iframes.

Change-Id: Ic2d562f2e29401382070f0bf8df0cf288a7eb078
OOUI PHP: GroupElement, ButtonGroupWidget

Change-Id: If8879670de267feb21e8ede030d13084536aaf4d
OOUI PHP: Layouts: Field, Fieldset, Form, Panel, Grid

OoUiGridLayout is currently not correctly flipped for RTL.
We'll fix this later.

Bonus changes to JS FieldLayout:

* Rename private member (and some variables) from 'field' to
  'fieldWidget' to avoid confusion with private member '$field'.
* Fix typos, rearrange some comments and reorder some code.

Bonus changes to JS FieldsetLayout:

* Remove redundant .static.tagName definition.
* Remove redundant documentation.

Bonus changes to JS GridLayout:

* Remove redundant .static.tagName definition.
* Correct documentation.
* Prettify code a tiny bit.

Bonus changes to JS PanelLayout:

* Initialize config with default values.

Change-Id: Ib07797b4129af528dddcb465a6412e448975159c
OOUI PHP: Widgets: Icon, Indicator, Label, Input, TextInput, CheckboxInput

Change-Id: I914d4973171567fb1e54de283d380f2f5bef4962
Merge "Rewrite OO.ui.Element.getRelativePosition() to be smarter"