write-config! function

Function to write all current options to a file, which can be loaded
later to restore the configuration.
edit-mode & unify search and eval mode

edit-mode is a generic input-mode for when text is being edited.
Key-event handling dispatch in edit-mode is determined by the value of
the *current-editable* global variable.

search-mode and eval-mode now use common event handlers, which reside in
command-line.scm.

This change doesn't serve any immediate purpose, but should make it
simple to add arbitrary editable text fields (e.g. db search bar, tag
editing, etc.).
mpd db search

The search windows is split vertically into two panes: the top for
entering queries, and the bottom for displaying results.  Queries are
strings of the form "[tag]:[value]".  Search fields can be added and
removed with the win-add!/win-remove! functions.  win-activate! performs
the search with the given query.

Search fields are edited by running the win-edit! function with a search
field selected.  By default, win-edit! is bound to the "i" key.
Match function for search view

Simple substring match within the results pane.  Same as searching in
the queue.
Refactor library window code into library.scm
Playlist management functions

Wrappers for playlist management functions from libmpdclient.
Also, mpd:list-playlists function which returns a list of playlist
names (currently not used).
Library view rewrite

Full rewrite of library.scm (now library-view.scm).

The main change is that window objects are created as needed in the new
code, as opposed to maintaining a small collection of windows and
reusing them.

Playlists are listed in the toplevel library window, though it is not
possible to view their contents (yet).

When a track is activated (by win-activate!), the track's metadata is
shown.
Library view: playlist/album separators
Major ui-curses refactor

"view" abstraction for screen updates.  A view consists of a window, a
title, and functions to print a row of the window.
Library: playlist support

win-activate! on a playlist in the library view causes the contents of
the playlist to be displayed.  win-add! causes the playlist to be
loaded.
options-view.scm

Move options view code from ui-curses.scm to options-view.scm.

Also, rename search.scm -> search-view.scm.
Replace libmpdclient with scheme lib

mpd-client.scm now communicates with mpd directly.  Implementation based
on the mpd egg.
Prevent removal of separator in search view
Fix bugs when window-data-len is 0

Prevent marking, activating and deactivating a window when it has no
data.
Inline editing of options in options view
editable: defaults for home and end keys
Simpler editable constructor

make-simple-editable takes 3 functions as arguments:
  * a function to call when enter is pressed ("activate")
  * a function to call when enter or escape is pressed ("leave")
  * a function to call whenever a key is pressed ("changed")

This saves client code from having to write key handlers in the common
case, where no special processing is needed beyond handling
enter/escape, and registering events for screen updates.

Also, the cursor is now made visible whenever edit-mode is entered, so
that the editable init function doesn't have to call cursor-on.
editable: support for delete & keypad enter
key-case macro

Macro for defining key handlers.  Regular case doesn't work with ncurses
key constants for whatever reason, so key-case expands to a bunch of
conditionals.
commane-line: history

The up and down keys cycle through previously entered commands/queries
in eval/search mode.  Implementation uses a hand-rolled doubly-linked
list with a cursor.