Changes to 16-FEB-2011: A simple "append-only" database between r0 and r1

'''A proposed API and implementation for an append-only database'''

   1. Journal (multiple concurrent writers) -- all writes go here, acts as a buffer
   2. Database (flat text file, looks like a log file) -- written to by single thread reading from Journal; order of inserts is not guaranteed to be the same as order of inserts into journal
   3. Index (binary tree of keys) -- values are kept in sorted order with a count of the number of values; values are pointers to offsets in the Database

Support disabling the journal or the index at compile time using `#define AMDB_NO_JOURNAL` and `#define AMDB_NO_INDEX`
(blank line)
Support disabling the journal or the index at run-time by not specifying them during an `amdb_open()` call
(blank line)
Journal format:
   1. [[Magic (32-bits)]]
   2. [[Header Size (`HDR_SZ`; 32-bits)]]
   3. [[Header (`HDR_SZ` * 8-bits)]]:
   33. Tag-Length-Value
   4. [[Tracks (`NUM_TRACKS` * `TRACK_SIZE` * 8-bits)]]
(blank line)
API:
   1. void *amdb_open(const char *db, const char *journal, const char *index);
   11. All parameters are strings containing the pathnames to files to store their respective components
   2. void amdb_insert(void *handle, time_t date, ...);
   22. All additional arguments are required to be strings in pairs, the first of the pair being the field name and the second being the field contents
   22. Terminate with NULL
   3. void amdb_consumejournal(void *handle);
   33. Starts a process that consumes entries from the journal and writes to database and index files.

Legend

     Only in r0
     Only in r1
     -->      Modified slightly between r0 and r1