Mtp: Hierarchical write support

This patch adds much needed hierarchical support for MTP devices. Tracks
will be placed in a folder named:

root/Artist/Album/xx. Name.Extension
Mtp: Improves hierarchical support with some Linq

Here we compress the for loops using Linq to present a more functional
approach to the code. We also modify the Album cache by also adding
the Folder for each album.
Dap/Mtp: Respect Disposable pattern (BGO#733297)

The Disposable pattern has been implemented incorrectly in the above
classes. This patch:

1. ensures Dispose is a subclass -> baseclass process;
2. removes the error prone Flush from Dispose;
3. removes the InternalLock override from MtpSource.

Conflicts:
	src/Dap/Banshee.Dap.Mtp/Banshee.Dap.Mtp/MtpSource.cs
DapService: Correct source disposal

After BGO#666696, a Flush call was added to DapSource Disposal to ensure
that playlists were synchronised when the user quits Banshee while a DAP
is plugged in.

Unfortunately that solution is no longer working, the culprit apparently
is the threading used in DapService during the UnmapDevice call. Since
that method spawns a thread which locks on DapService's sync variable,
all the unmap jobs wait until DapService is disposed, nullifying the
source map, required during the Unmap call, as a consequence, BGO#666696
has re-occurred as the unmap call returns silently.

The solution therefore, is to call the sequential Unmap method which
ensures that sources are disposed before the map is eliminated.