Marky 2.0!

- Support arbitrary lookup/output chain lengths (new: -w/--window, defaults to 1 for previous behavior)
- Common:
  - Rename "Link" to "Snippet" to be less ambiguous (and since they're no longer strictly pairs)
  - Have Marky/frontend own the State, instead of duplicate handling in the backends.
- Backends:
  - Update write call to support bulk writes, misc other optimizations.
  - SQLite: Prepare statements up-front. Use "INSERT OR UPDATE" when applicable.
  - Cache: Fixes to allow usage across read/write scenarios. Previously only one or the other.

End result: Variable lookup chain lengths now supported, with same or better performance than before!