(BREAKING CHANGE) Complete rewrite of the description framework. 

The description framework has been completely rewritten to be a bit more sound; this is a breaking change, where the following APIs have been affected:
* `Violation.description` is now *optional*.
    * While validators are expected to be defined via the `com.wix.accord.dsl.validator[T]` macro, this is not mandatory; consequently there's no way to guarantee that a description is generated prior to execution. 
    * If your code decomposes the actual violations, you'll need to take this into account. The syntax for test helpers (`failWith` etc.) remains the same.
* The surface area of `Validator[T]` has been drastically reduced.
    * Most convenience functionality has been shunted to the `BaseValidator[T]` trait, which is what implementors should be deriving from.
    * A convenience DSL is provided by this trait (provided by the mixed-in `ViolationBuilder) to simplify  violation construction.