closes #489 Add a storage::Dictionary class to handle the lifetime of a
DB *. Remove db manipulation from storage/env.h to suggest that all
dictionary management go through this new class.
changed storage::Dictionary to always be in a valid state #499

When Dictionary needed to be open()ed after construction, it allowed for
strange races and the proliferation of extra checks in many other places.
We moved open() into the constructor so that if Dictionary is ever fully
constructed, it's also valid.   To do this, we throw a new exception that
must be handled by any creator of a Dictionary that passes
may_create=false.

We also changed Dictionary to be stored in a shared_ptr to allow for
exception-safe closing.

closes #499

Conflicts:

	src/mongo/db/storage/dictionary.cpp
	src/mongo/db/storage/dictionary.h
fixes #477 Use ydb row locks to serialize opens for a parcitular ns
instead of an explicit mutex. Change where we synchronize so we can be
sure there's no deadlock between row locks and the rwlock that protects
the nsindex.