Move repository implementation to Ecto.Repo.Backend

The main reason is to clean up the Ecto.Repo implementation
which was getting too long and confusing. We also refactored
`start_link` to pass the already parsed URL to the adapter.