Add Dataset#server? and Database#sharded?

This is used both to simplify some code and as an optimization.
Instead of checking if the dataset already has a server defined
in the calling code, Dataset#server? can be used to set a default
if it isn't defined.  To avoid cloning the dataset in the unsharded
case, server? calls sharded? on the Database, and returns self if
true.