rename ModifyBothAssetsForLink to StrictAssetLinkACL
Move creation of link transactions from RT::Ticket into RT::Record

Now articles and other objects will record transactions for links.

    (cherry-picked from rt commit 7821ff1e221032408f6bad2386618ce96df5519f)
Refactor our link type and direction maps into RT::Link

A single definition is much cleaner and easier to maintain than
duplicates scattered among the classes or pointers into RT::Ticket.

Any existing non-core code which needs the maps will need to be updated
to point to RT::Link.

    (cherry-picked from rt commit 4effe0cca3dc163e2d4444432245c48db6354f10)
Use refactored link scheme.
Simplify and consolidate link elements.
Enable more asset properties in graphs.
Wrapper for custom field display. Fixes a minor warning.
Parsing OCFV form args into a data structure is useful in future functions

The end goal is less cases of custom matching %ARGS to do OCFV
processing.

    (cherry-picked from rt commit f9fc38e920d79c559101c946b36b14174181d903)
Split OCFV normalization into a separate function for general use

Ideally this would live in RT::CustomField, you'd call it on an object,
and life would be simpler.  Due to file uploads, however, the
normalization still has a foot planted in the web interface.

    (cherry-picked from rt commit 6a9d0bff0f6aaafc222e324ed2cc50d57a4e4ea0)
Consolidate parsing OCFV form args into Create parameters for new records

New records often require setting custom field values via ->Create
parameters.  ProcessObjectCustomFieldUpdates() doesn't cut it for this
case since it makes the CF updates directly.

    (cherry-picked from rt commit be3529af672e52077294c584701038e0cd71e34f)
Switch to using DECODED_ARGS

    (cherry-picked from rt commit bd7b51cc1ea151c83c67386f3b68aa29a5460763)
Remove the factory script for generating classes based on the database

This hasn't been used in years for; instead we hand maintain the classes
as necessary.

    (cherry-picked from rt commit e9b8914a3a7be465a177465b239087e0c45f356d)
Use RT::SearchBuilder instead of unchanged subclass
Use our link maps instead of hardcoding link type pairs

    (cherry-picked from rt commit eae7599d2282029137e62099b9e9c453ff715274)
Refactor processing %ARGS for new links during record creation

The inputs processed are generated by /Elements/EditLinks and may be
used by object types other than tickets.  Refactoring into a function
lets other objects re-use the same code.

    (cherry-picked from rt commit 76a9d8dc934c014c86279b1c3b716a9b40609df7)
Unify global and queue-specific scrip administration pages

    (cherry-picked from rt commit d5e6b6460349faec5cc3b61bff1cec166d176083)
update shredder methods
Use new AddAndSort interface to apply scrips to multiple queues

This adds a new record type (and corresponding table and classes) to
serve as the linkage between scrips and queues, leveraging the new
AddAndSort record and collection classes.

    (cherry-picked from rt commit aff115d3595c1cdf3c922f82865b590ae7a423db)
Merge branch '3.0-trunk' into 3.2/rt-4.1.5-cherry-picks
Shred ObjectScrip records when shredding a Scrip

Shredder tests now pass.

    (cherry-picked from rt commit 6c550b0460f08c4a8bbd142eda28c68c748a89c9)
Sort scrips based on ObjectScrips' SortOrder, not description

This allows differing order of execution of the same set of scrips from
one queue to another.

    (cherry-picked from rt commit cc818bd4b9bf4fe3791f39e42226864f982c5723)