build: Split some code into a private shared library

The overall idea is to start adding unit tests, wherever possible.
Putting the tested code in a private library makes it accessible from
test cases because they can link to it.

Subsequent commits will add a new codec API for GeglBuffer. It will be
very important to have unit tests for those code paths because:
  * That code will be inherently testable and tests are great.
  * That code is likely to be security sensitive, will handle all
    sorts of dodgy input from untrusted sources, and written using
    very old APIs with brittle error handling.

This is a step towards that.

A private shared library seems better than a private static archive
because the most easily testable code paths are shared across the main
application and the thumbnailer. Therefore, the assumption is that the
benefits of sharing that code across both processes outweigh the
drawbacks of having to resolve symbols from yet another shared library
on startup. However, this is just an assumption. There's no data
behind it.

#63
3 jobs for wip/rishi/split-private-library in 12 minutes and 8 seconds (queued for 1 second)
Status Job ID Name Coverage
  Test
failed #123622
flatpak

00:12:08

 
  Review
skipped #123623
review
skipped #123624
allowed to fail manual
stop_review
 
Name Stage Failure
failed
flatpak Test
    shutil.copyfile(from_file, to_file)
File "/usr/lib/python3.7/shutil.py", line 121, in copyfile
with open(dst, 'wb') as fdst:
OSError: [Errno 30] Read-only file system: '/usr/share/gir-1.0/Tracker-2.0.gir'
FAILED: meson-install
/usr/bin/meson install --no-rebuild
ninja: build stopped: subcommand failed.
Error: module tracker: Child process exited with code 1
ERROR: Job failed: exit code 1