Constraints middleware

Adding a constraints middleware that allows different constraints for a Swift-on-File storage policy.

Currently, Swift allows only one set of object naming and metadata rules per cluster. As new storage policies
are implemented, it is possible that different storage back-ends have different set of rules on how objects
should be created for that specific storage system. SwiftOnFile has different rules as objects name are mapped to a POSIX filesystem directory structure. For Example: no names with double slashes or ending with
slashes are allowed.

At first a solution was proposed to include a generic patch in the upstream swift code, but after discussing with the Swift community it became clear that it would be better to have a global set of constraints that covers the whole cluster and if a specific storage policy has specific constraints than it should have its own middleware.

This middleware solves the issue #28