Middleware handling updates

First, this forces the configured middlewares to be a `Set`. You shouldn't add the same exact middleware args multiple times.

Second, this sets the logging middleware like any other middleware.  The logging middleware args are pushed onto the server config middlewares set.  This means it is added just like any other user-config'd middleware is added.  This has the added benefit of testing that the sinatra app applies the server config's middlewares.

@jcredding ready for review.  No behavior changes - just better edge case middleware handling and test improvements.