Refactored ensure() and ensureNot(); added throwProvidedException()

And also was done as is for performance reasons.