Add recursive patch repository discovery.

No visible effects on the configuration yet.
Move patch stack evaluators to their own file.
Move the message box showing missing patches into its own function.
Permanently keep patch.js in a patch object.

Of course, this comes with the disadvantage that update server changes won't be applied until the game has been restarted (or until hot-repatching is implemented) ... but well, thcrap_update is not the only user of patch.js anymore.
Move font loading out of thcrap_init().

That one call was so easy to overlook. Much better from a consistency standpoint, too.
Move patch updating out of the patch bootstrapping function.
Add some missing error checks.
Add json_array_set_new_expand().

This is what we actually wanted to use in the TSA layout engine (which also has been the only user of json_array_set_expand() so far).
TSA layout engine: Fix reference counting / memory leak issues.
TSA layout engine: Use json_string_nocheck() instead of converting to or expecting UTF-8.

Since we just abuse Jansson to give us a freely resizable array in memory, the encoding doesn't actually matter.
thcrap_configure: Include the repository ID in the patch selection object.

Also introducing more variable naming consistency.
thcrap_configure: Remove the special treatment of base_tsa.

... which will be handled by the dependency system in the future.
thcrap_configure: Load all local repositories into a list.

This way, everybody will be able to configure a patch stack using any patch of any repository they ever downloaded, even if some may be offline at the moment of configuration.

... but right now, we can only select from one randomly chosen repository anyway. Oh well.
thcrap_configure: Refactor the repository patch list into its own function.

I don't see a way to nicely integrate the info page into that output...
thcrap_configure: Display all repositories in the patch selection.
Refactor patch stack updating into its own function.

Because hey, we're going to use this more than once, too.
thcrap_configure: Split patch bootstrapping into two functions.

One for building the patch object with the archive, another for downloading patch.js.
Initialize patches during selection in a separate internal run configuration.
Take dependencies into account when adding and removing patches.

Finally, that's it! This basically implements everything we wanted to have in #18.
thcrap_configure: Refactor output of selected patches into its own function.