add new dependency: bitbucket.org/ww/cabinet (cgo wrapper for Kyoto Cabinet)

(taken from upstream changeset ee876328069f)
db: add KyotoDB, a BuildDB implementation using Kyoto Cabinet

This required several additional changes that will be used for most persistent
implementations:
- add Close() method to the interface
- add binary encode()/decode() methods to BuildRecord (only useful for
  key/value stores)
db: improve error handling in KyotoDB
db: add a bit of debug logging to KyotoDB
runtime: use a real persistent database (KyotoDB) instead of DummyDB
db: fix broken key generation in KyotoDB
db: add Dump() to BuildDB interface (implement it in DummyDB, KyotoDB)
main: add fubsydebug (same binary, different name -- eg. with a symlink)

The idea is that it will provide multiple subcommands:
  fubsydebug CMD ...

The only command currently implemented is "dumpdb".
db: require OpenKyotoDB caller to explicitly specify read-write vs read-only

This means that fubsydebug won't accidentally create an empty database
if the user passes it an incorrect filename.
db: make OpenKyotoDB() take the exact filename, not the basename

This makes the UI for fubsydebug clearer: the user just specifies the
filename, no funny tricks required. But it probably needs we'll need a
small layer between runtime and Open*DB() to figure out which DB type
to open when we have multiple DB types available.
db: decode each node's BuildRecord in KyotoDB.Dump()
dag: implement FileNode.Signature()
dag: implement FileNode.Changed()

Now Fubsy is a genuine incremental build tool: it no longer thinks
that every file has changed every time!
doc: remove some obsolete notes now that incremental builds work
doc: update version numbers from 0.0.1 to 0.0.2
doc: minor tweaks to language tutorial
db: only build KyotoDB if the C library is available at build time
runtime: detect and warn if no database libraries available
dag: add DAG.MatchTargets() method
main,runtime: respect the user's requested targets

- in main, make sure they get from the command line to the BuildOptions
  object
- in runtime, pass that to dag.MatchTargets() instead of FindFinalTargets()