ges: Implement a GESGroup class, subclass of GESContainer

The GESGroup class is used to group various GESContainer
together, it can contain either GESClips or GESGroup or both.
timeline: Append missing layers when moving groups between layers

This was a missing feature of the newly added groups
timelineelement: Make sure that we will never set a negative start

Currently we can end up overflowing the start of others child of our
parent, avoid that making sure we can set our start to what was
requested by the user before actually doing it

+ Add a test
group: set priv->setting_value to TRUE when moving ourselves in _child_removed
container: Add a 'recursive' argument to the get_children method

API:
  - ges_container_get_children (GESContainer *container);
  + ges_container_get_children (GESContainer *container, gboolean recurse);
container/group/clip: Allow creating an empty group.

This is a legitimate use case.
group: Add an empty group constructor

As it is more intuitive for users.

API:
  ges_group_new
timeline: create_transitions_on_layer *before* actually commiting

Everything need to be in place before commiting, otherwize it makes no
sense at all.
track: Make it possible to disable the mixing feature

API:
  ges_track_set_mixing
  ges_track_get_mixing
framepositionner: fix messup with propname enum.
track-element: No need to log when prio == MIN_GNL_PRIO.
test-utils: Add test file generation code.
tests: Add integration tests

Those are test with real media files, they are run separetely from other
unit tests using the make check-integration command (can be done from
the toplevel directory)
tests: Simplifie integration tests using macros all around
ges-uri-clip: Add the possibility to specify an assets directory

through the GES_TESTING_ASSETS_DIRECTORY environment variable.
integration: add SeekInfo and get_position callback for seek tests

A Seekinfo structure consists of 2 fields:
- position: the position to seek to
- seeking_position: the position to perform the seek from

Seeks can be appended to a global list e.g. from code:
seeks = g_list_append (seeks, new_seek_info (0.2 * GST_SECOND, 0.6 * GST_SECOND));
seeks = g_list_append (seeks, new_seek_info (1.0 * GST_SECOND, 1.2 * GST_SECOND));
seeks = g_list_append (seeks, new_seek_info (1.5 * GST_SECOND, 1.8 * GST_SECOND));

The get_position callback checks the current position and attempts to perform
the corresponding seek with gst_element_seek_simple