Re-add tcp support for slave connections

Based on libuv this re-adds tcp support for slave connections and
additionally allows connecting a simulator over a tcp connection (for
fun/debugging/experimentation)
box-layout: re-work allocation

Instead of being based on the algorithm from gtk this updates
rut-box-layout to work more like the css flexbox model internally -
though currently there is no api for setting the flex_grow/shrink
weights nor support for controlling the flex_basis. The expand boolean
passed to rut_box_layout_add() effectively just sets the
child->flex_grow weight to 0 or 1.

This also lets us remove the distribute_natural_allocation code from
rut-util.c.
rut layout: ignore child pref changes during allocate

callbacks notifying that a child has changed its preferred size during
an allocation will be as a result of the container changing that childs
size so we shouldn't trigger a redundant re-allocation in these cases.
add direct x11 support

This adds X11 support to Rut giving us better control over X integration
compared to depending on SDL's abstraction.

This patch greatly improves our internal rut_shell_onscreen_t api and
integrates use of the onscreen api throughout Rut and Rig. This will
help enable multi-window support at some point but also provides a
cleaner way of associating platform specific state with onscreen
framebuffers.
Add initial rig_text_t component

UI text used to be handled by rut_text_t but now the aim is to handle
text shaping, wrapping and rendering more directly in Rig. This will
give us tighter control over typography and over layouting + rendering
optimizations compared to what we have currently with CoglPango for
example. This also lets us avoid some dependencies including glib,
pango and cairo.

This builds on Freetype for glyph rasterizing, Harfbuzz for shaping, ICU
for implementing the unicode bidirectional text algorithm + providing
unicode meta data and Fontconfig for matching fonts.

Since the above libraries are relatively small and portable (with the
exception perhaps of libICU) we don't introduce any further layer of
abstraction for portability which helps keep our code fairly small and
malleable as Rig's needs evolve.

With regards to ICU, we use a modified version of ICU that builds using
automake and libtool and provides some extra apis that allow Rig to
be fully responsible for loading and caching ICU data. Considering the
aim to support using Rig in a browser, the plan is to split the ICU
common data up so it can be downloaded to clients on demand.

A key aim here is to provide consistency across the different platforms
that we want Rig to support which would be difficult if rasterizing and
shaping behaved slightly differently on each platform for example.
XXX: disable play mode input temporarily
Update the linux build.sh script