* [Custom Fieldsets] Custom fieldsets allow groups of related custom fields to be added to records in order to classify them. Previously, adding a new custom field to a type of record (e.g. tasks, tickets) would always display that field on every record. This led to a lot of clutter when custom fields were only used by a single group, worker, or Virtual Attendant behavior; and when a custom field was only related to a subset of records of the same type. With fieldsets, you can optionally add multiple sets of custom fields to a specific record.  For example, an asset record could have a 'Car' fieldset added to it, with fields that describe mileage, color, make, model, VIN, etc.  Another asset record could have a 'Computer' fieldset, with fields for CPU speed, RAM, serial #, etc.  Both of these records would be assets, but they would be classified separately.  These fields would not be mixed between the two records. It is still possible to have global custom fields for all records of the same type, as before; it's just no longer the only option.  Fieldsets can be owned by roles, groups, or workers. Existing group-based custom fields will be converted to group-owned fieldsets during the migration. Fieldsets are managed in the peek popup and can be added using the 'Add Fieldset' button which displays a menu of available fieldsets. A fieldset can also be deleted by clicking the red X button that is displayed when hovering over any of its fields.
* [Groups/Custom Fields] The 'Custom Fields' tab on Group Setup now manages the custom fieldsets owned by the group, rather than individual global fields.
- The 'Create Custom Field Group' popup now defaults to the current owner, if displayed on a tab.
- Custom field group views now display the 'marquee' message when adding a new row.
- Display context first on custom field group worklists.  This makes things more readable, like 'Ticket - Billing Info'.
- Custom field group chooser popup now filters to a specific target context (if given).
- Converted ticket peek from its own custom field handling to using a common template [code cleanup]
- abstract custom fieldsets on peek and profiles (adding/deleting)
* [Custom Fields/Usability/Contexts] Contexts (record types) can now provide a hint that they implement custom fields for their records.  This allows Cerb to only show custom field options for records that support them.  Previously, the 'Custom Fields' page in Setup displayed many record types that had no way to display or edit such fields.
* [Profiles/Usability/Aesthetics] On the profile for every record type, the toolbar has been moved to the very top of the page.  Since custom fieldsets are now displayed at the top of profiles, this helps the page flow better.
[Custom Fieldsets] Implemented custom fieldsets on the peek popups for all contexts.
- updated SDK example for custom fieldsets
- code cleanup, renamed 'custom_field_group' to 'custom_fieldset' everywhere.
- code cleanup, aesthetics, no fieldset top border on profiles.  Squash with abstract profiles.
* [Custom Fieldsets/Subtotals] Since custom fieldsets have increased the length of many custom field names, the title of the subtotals sidebar on worklists will now be wrapped when necessary.
[Code Cleanup] Linefeeds
- implemented the underlying code for bulk updating custom fieldsets
* [Custom Fieldsets/Bulk Update] Custom fieldsets and their fields may be set from the Bulk Update popup for any records that support them.

* [Knowledgebase/Bulk Update/Custom Fields] Custom fields may now be set on knowledgebase articles using Bulk Update.
- Removed the old code for setting custom fields by group.  This is now handled with custom fieldsets.
* [Mail/Compose/Custom Fieldsets] Custom fieldsets may be set when composing mail.  This solves a long-standing issue where desired custom fields couldn't easily be set when creating a ticket, and instead had to be set by subsequently editing the newly created record.  Additionally, custom fields could only be set based on the group associated with the ticket. Now, all custom fieldsets are available when creating a ticket, irrespective of factors like the group.  This also simplifies the compose popup by not displaying custom fields that aren't needed.