Add grn_db_recover()

It's an experimental API.

You should use this API carefully. You don't use this API when other
process or thread open the target database. If you use this API for
database that is opened by other process or thread, the database may be
broken.

grn_db_recover() checks the target database. If there are broken objects
by crash(*), it tries to recover it.

(*) Broken objects are detected by checking whether IO lock is remained
or not. Because crash may remain IO lock. If other process or thread
open the database, IO lock may be remained. But the IO lock is normal
lock not unexpected IO lock. So broken objects detection may be failed.

For now, index column is only supported for broken objects detection and
recovering.

TODO:

  * Document me.
  * Support broken object detection other objects.