Support multiple StoragePlugin instances provided by a single library

Allows to make available multiple distinct filesystems, for example one
for internal memory of a device and another for removable memory card.
Load FSStoragePlugin configuration from a file.

No more hardcoded values, every aspect of each storage including
blacklisted paths is now set up in /etc/buteo/mtp-fsstorage-conf.xml.
Change StorageID assigning as per Richard Braakman's suggestion

This should perhaps be assignStorageId(1, i + 1). In the commented-out
code that handles multiple plugins, the first argument is the plugin
number. The second one is called partitionNo. I'm not sure it matters
anywhere, but I guess that conceptually the home dir and the sd card are
partitions of the fsstorageplugin.
Move mtp-fsstorage-conf.xml to sample-vendor-configuration package
Use external blacklist

The file has a trivial path-per-line format allowing for its easy
sharing between applications.
Merge pull request #20 from xhaakon/multi-fsstorage

[mtp] Load FSStoragePlugin configuration from a file. Fixes JB#9613
[mtp] Fix possible crash after resetting USB transport. Fixes JB#14031

The MTPResponder can get events while sending data, and those events
may cancel the transaction before a response is sent.
Fix possible segfault in IOThread::interrupt()

Thread executing the run() method could set m_handle to zero after the
check in IOThread::interrupt(), causing a crash in pthread_kill called
with null handle.

Mutex m_handleLock now guards access to m_handle. The common logic was
moved into IOThread::run() that calls virtual method execute(), which is
to be implemented in subclasses instead of QThread::run().
Merge pull request #21 from xhaakon/iothread-segfault

Fix possible segfault in IOThread::interrupt()
Do all the metatype registration when initializing MTPResponder
Export removable storage only when mounted