[JENKINS-14495] Define Behaviour.specify.

The fix of JENKINS-14495 was a bit of a hack: relying on `Function.toString` to uniquely identify behaviors and thus prevent duplicate registrations. Anyway the old `Behaviour.register` failed to provide any way to prioritize registrations, with the result that some callers directly accessed `Behaviour.list`.

Introducing `Behaviour.specify` as a cleaner alternative to these things, and using it from core at least.

`hudsonRules` ~ `jenkinsRules` is a special challenge: this was again directly accessed from core and plugins. Left in place but empty by default.

Sources known to use now-deprecated APIs:


    ant-plugin/src/main/resources/hudson/tasks/_ant/AntTargetNote/script.js: Behaviour.register({
    collapsing-console-sections-plugin/src/main/resources/org/jvnet/hudson/plugins/collapsingconsolesections/CollapsingSectionNote/script.js: Behaviour.register({
    copyartifact-plugin/src/main/resources/hudson/plugins/copyartifact/SpecificBuildSelector/config.jelly: <script type="text/javascript"><![CDATA[ Behaviour.register({
    ec2-plugin/src/main/resources/hudson/plugins/ec2/EC2Cloud/computerSet.jelly: Behaviour.register({
    embeddable-build-status-plugin/src/main/resources/org/jenkinsci/plugins/badge/BadgeAction/index.groovy: Behaviour.register({
    form-element-path-plugin/src/main/webapp/script.js: Behaviour.list.push({
    form-element-path-plugin/src/main/webapp/script.js: Behaviour.list.unshift({
    global-build-stats-plugin/src/main/webapp/scripts/global-build-stats/standardFunctions.js: Behaviour.register(Object.extend(hudsonRules, myHudsonRules));
    global-build-stats-plugin/src/main/webapp/scripts/global-build-stats/standardFunctions.js: Behaviour.register(Object.extend(hudsonRules, myHudsonRules));
    gradle-plugin/src/main/resources/hudson/plugins/gradle/GradleTaskNote/script.js: Behaviour.register({
    jclouds-plugin/src/main/resources/jenkins/plugins/jclouds/compute/JCloudsCloud/computerSet.jelly: Behaviour.register({
    matrix-project-plugin/src/main/resources/hudson/matrix/LabelAxis/config.jelly: hudsonRules["DIV.labelAxis-tree"] = function(e) {
    openid-plugin/src/main/resources/hudson/plugins/openid/OpenIdUserProperty/config.jelly: Behaviour.register({
    openstack-plugin/src/main/resources/jenkins/plugins/openstack/OpenstackCloud/computerSet.jelly: Behaviour.register({
    phing-plugin/src/main/resources/hudson/plugins/phing/console/PhingTargetNote/script.js: Behaviour.register({
    publish-over-ssh-plugin/src/main/webapp/js/pos.js: Behaviour.register(sshBehave);
    role-strategy-plugin/src/main/resources/com/michelin/cio/hudson/plugins/rolestrategy/RoleStrategyConfig/assign-global-roles.jelly: Behaviour.register({
    role-strategy-plugin/src/main/resources/com/michelin/cio/hudson/plugins/rolestrategy/RoleStrategyConfig/assign-project-roles.jelly: Behaviour.register({
    role-strategy-plugin/src/main/resources/com/michelin/cio/hudson/plugins/rolestrategy/RoleStrategyConfig/manage-global-roles.jelly: Behaviour.register({"#globalRoles TD.start A" : deleteGlobalRole});
    role-strategy-plugin/src/main/resources/com/michelin/cio/hudson/plugins/rolestrategy/RoleStrategyConfig/manage-global-roles.jelly: Behaviour.register({"#globalRoles TD.stop A" : deleteGlobalRole});
    role-strategy-plugin/src/main/resources/com/michelin/cio/hudson/plugins/rolestrategy/RoleStrategyConfig/manage-project-roles.jelly: Behaviour.register({"#projectRoles TD.in-place-edit" : function(e) {
    role-strategy-plugin/src/main/resources/com/michelin/cio/hudson/plugins/rolestrategy/RoleStrategyConfig/manage-project-roles.jelly: Behaviour.register({"#projectRoles TD.start A" : deleteProjectRole});
    role-strategy-plugin/src/main/resources/com/michelin/cio/hudson/plugins/rolestrategy/RoleStrategyConfig/manage-project-roles.jelly: Behaviour.register({"#projectRoles TD.stop A" : deleteProjectRole});
    sectioned-view-plugin/src/main/resources/hudson/plugins/sectioned_view/ViewListingSection/config.jelly: hudsonRules["DIV.views-tree"] = function(e) {
    shiningpanda-plugin/src/main/resources/jenkins/plugins/shiningpanda/matrix/PythonAxis/config.jelly: hudsonRules["DIV.pythonAxis-tree"] = function(e) {