allow options.data to accept a function

Sometimes it's required to provide dynamic data, like excluding items
or similar things. The current solution is to manually update the
`data` option after a change:

    $input.marcoPolo('option', 'data', { without: selected.join(',') })

To simplify providing this, this commit adds all necessary changes to
allow options.data to accept a function, so this could be rewritten as:

    $input.marcoPolo({
      url: '/marco/polo',
      data: function($inp, query) {
        return { without: selected.join(',) };
      }, ...
    });

Of course the existing functionality by providing just an object or string
still works as expected.