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.
Options prefixed with '__' are not sent to client

Otions values that might contain sensitive information can now use
a prefix of '__' on the option name to prevent the value from being
sent to clients.

Note: Options prefixed with '__' are not special-cased on the server
and server-side code will need to refer directly to the prefixed name
to make use of these variables.
Also, the option names are still sent to the client, please be careful
if those option names contain sensitive information as well.