PlayerEngine: workaround dupe about-to-finish signals (bgo#679938)

Banshee codebase was making the reasonable assumption that
GStreamer was sending one (and only one) about-to-finish
signal for each play of each track, however this is not the
case, and this issue has been reported as bug BGO#722769.

Gapless feature was relying certainly on this assumption, and
therefore it was causing subtle unintended behaviours, such as:

- bgo#679938: Repeat always ON (tested by Ismael Olea)
- bgo#674293: Stop when finished is ignored (very likely)
- and possibly more...

To fix this we need to prevent the event RequestNextTrack to
be fired twice, so we put a timestamp every time current_track
is assigned, store that timestamp in the native and managed
PlayerEngines, and compare it, to prevent the OnAboutToFinish()
method to run twice for the same play.

Conflicts:
	src/Backends/Banshee.GStreamerSharp/Banshee.GStreamerSharp/PlayerEngine.cs
MediaEngineTests: if Teardown() fails, avoid hanging
MediaEngineTests: make TearDown more robust

If you added a test that ended up being on Idle state at the end
of its execution, the TestFixtureTearDown could fail because
when you Dispose() or Pause() a service that is in Idle state, the
event Paused never arrives.

Fix that by playing a track before calling Dispose() in the TearDown.
MediaEngineTests: make test for bgo#679938 compatible with stable branch

The stable branch can be run against GStreamer 0.10, which for
some reason sends NextTrackStarting events when the current
track finishes, even if there's no next track. As this test
doesn't care about this signal but about the AboutToFinish one,
we tweak the test to only care about the events that matter
for the test.

Also, somehow this lambda syntax didn't seem to compile while
in the master branch it worked:

  MCS   ../../../bin/Banshee.Services.dll
./Banshee.MediaEngine/Tests.cs(154,1): error CS1660: Cannot convert `lambda expression' to non-delegate type `object'
./Banshee.MediaEngine/Tests.cs(154,1): error CS1660: Cannot convert `lambda expression' to non-delegate type `object'

So a System.Action variable is now used instead...

This commit will be forward-ported to the master branch from the
stable branch, to keep the code in sync.