Asynchronous client-side validations

* Validation is done with jQuery Deferred objects, this should allow
  individual validation option functions to return either an explicit
  success/failure value as before, or to return a Deferred object.

  All elements of the hierarchy, from validation functions through
  pages, return a deferred value that becomes 'success' when validation
  was completely successful.

  At the component and validation function levels the unsuccessful
  return value is a list of error messages, at the page level it is
  false.

  The Deferred objects need to eventually become an explicit value
  matching the same API as direct validation results.

* 'serverSide' validation option can be asynchronous

  The 'serverSide' validation option will use an asynchronous ajax
  call if the 'async' key is set to true.
Ajax calls on Submit-based validation are optional

The 'ajaxOnSubmit' option on JFormer can be used to specify whether
or not ajax-based validation options (such as 'serverSide') are
executed when validating a page / all pages upon clicking a submit
button.

The default is true (meaning ajax calls will be made).
Make JS more browser compatible

The 'bind' method is not available on Function objects in IE <9
so we use the jQuery proxy function instead.
Improve JS browser compatibility

IE <9 does not support Array.every, jQuery.grep is used instead
with a negated version of the Array.every predicate.