Add abstraction barrier between ReQL code and administrative code

Previously, the ReQL code directly manipulated semilattices when operating on databases and tables. Now, it manipulates them through an abstract interface that is implemented by a class is clustering/administration/.

I also moved rdb_context_t and related classes into their own file, rdb_protocol/context.hpp.
Make rdb_protocol/ never include clustering/.
Shorten long lines introduced in previous commits.
Make error messages the same as they were before, except for in the case of name conflicts or metadata conflicts.
Minor fixes suggested by @Tryneus.
Merge pull request #2716 from eliangidoni/fix-2359

Fix for #2359 by @eliangidoni
Minor fixes to previous merge (#2359)
Merge branch 'next' into tim_abstract_admin_interface
Merge branch 'next' into tim_abstract_admin_interface
Improve fix for #2359