Magic emerges from simplicity...

Magic emerges from simplicity... (Updates to database creation APIs)

The idea here is to follow a pattern of very simple, very non-magical, commands for the basic operations which can then be composed into more complex operations. The simple commands are:
- Exists: True if database exists; false if it doesn't
- HasTables: True if the database has any tables; false if it doesn't; potentially throw if the database doesn't exist
- Create: Create an empty database or potentially throw if a database with the given name already exists
- Delete: Delete an exist database or potentially throw if the database doesn't exist

None of these commands do existence checking because this has proven to be problematic in many situations and providing these building block commands thus allows the most flexibility for people to get the behavior they need without being dependent on things like exists checks that may not work. For example, you may have some mechanism in your app/infrastructure that tells you this is the first run and therefore the database cannot exist and needs to be created. With these commands this can still be mad to work even if there the exists check we would do does not work with the provider/environment you have.

All that being said, there are two common things that people do, so there are two higher-level composed commands provided out-of-the-box:
- EnsureCreated will create the database if it doesn't exist and create tables for the model if the database doesn't have any tables. It will do nothing if the database exists and has any tables in it.
- EnsureDeleted will delete the database if it exists or do nothing if the database doesn't exist.

SQL Server and In Memory implementations provided and tested, although not yet tested against SQL Azure. SQLite implementation provided but not tested since there are currently no SQLite tests.

See Issue #161