This is Where the Function Stops: Map function on ajaxOnSubmit invocation.

Before, we bound the function when we processed the element. Because this
occurred in NodeSeq=>NodeSeq function, we had no guarantee that it would run in
the correct formGroup, oneShot, callOnce, etc contexts. To deal with the form
group part of this, we were capturing the form group and setting it when we
went to actually run the binding function. However, this left oneShot,
callOnce, and potential future contexts like them out in the dark.

We now run the fmapFunc call as soon as ajaxOnSubmit is called, and the
NodeSeq=>NodeSeq function is used solely to bind the resulting id to the
matching element(s). This means the function mapping happens in the calling
context, and we avoid all of the above issues.

There is a subtle shift in behavior: multiple matching elements will get the
same function id, where before they would get different ones. Realistically,
this shouldn't cause a big problem, since they'll be invoking the same function
anyway.

Fixes #1644 .
All contexts are handled because of calling contexts. The form group handling here is related to the submit button and is the same thing we do for all submit bindings: if the user hasn't explicitly requested a form group, we set a non-zero form group to give the submit button later execution than other form handlers. If the user did explicitly request a form group, we assume they know what they're doing and leave it alone.

The thing that changes here vs before is that `_formGroup` will have the value that it had when `ajaxOnSubmit` was called. So will `_oneShot`, `_callOnce`, etc, which are checked in `fmap` to decide the behavior of the mapped function. Before, this could instead have been run outside of the calling `oneShot` and other scopes during CSS selector application. The least likely for people to notice was `formGroup`, as it's *mostly* used internally rather than by consumers of the framework.

The whole shebang should probably be centralized with a descriptive function name, but I'm slowly making progress on writing a replacement for `SHtml` for Lift 3 so I probably won't be doing that as part of this targeted a bug fix.