CollinScripts, Collins Actions, List Headers, oh my!

Hey guys,
This change introduces several different notions into Collins:

CollinScripts:
A CollinScript is a piece of Scala that has the same level of access to Collins internals as code integrated directly into the Collins codebase.  CollinScripts are loaded into a separate interpreter based upon Scala Script Engine:

http://code.google.com/p/scalascriptengine/

While SSE is relatively well unit tested, user configurability such as this can introduce instabilities into Collins, and so I've wrapped the engine in some try/catching and some logging, so if the script itself throws an exception, Collins itself will not go down.  Most of this code can be found in the CollinScriptRegistry.scala file, particularly within the callMethod() function.

Collins Action:
A Collins Action is, simply, a user-definable action that can be executed upon an object from Collins, such as an Asset.  Actions are implemented by way of Executors and Handlers:

Executor - Implements runCommand, runCommandString, runCommandBoolean from the ActionExecutor trait.  An executor handles actually 'doing' the action, which is something like calling out to the shell or calling a method from a CollinScript.

Handler - A handler implements object-specific behavior based upon the interfaces specified in ActionExecutor

Collins Actions are configured by way of a util.config.ActionConfig object, and the handler for a Collins Action can be obtained from one of these objects by the following method call:

import collins.action.Action

Action.getMethod[<handler type>](<your ActionConfig object>)

where <handler type> is currently one of the following:

AssetActionHandler
AssetsActionHandler (handles Page[AssetView])
CallbackActionHandler (handles PropertyChangeEvents)

Tag Decoration Changes:

Tag decorators have been tricked out a bit to support default values, column headers, and three concepts based upon Collins Actions: showIf, decoratorAction, and formatterAction.  Here's an example:

HOSTNAME {
  default="<em>None</em>"
  header="Hostname"
  showIf {
    type=script
    command=[
      "collins.script.ShowIf.showHostname"
    ]
  }
  decoratorAction {
    type=script
    command=[
      "collins.script.TagDecorators.decorateHostname"
    ]
  }
  formatterAction {
    type=script
    command=[
      "collins.script.Formatters.ellipsis"
    ]
  }
}

showIf is a Collins Action which is passed a Page[AssetView] (if a script) or templates a command based upon methods from the Page[AssetView] object (if a shell exec) and determines a boolean true or false value based upon whether the tag should be shown for the current assets on the page.

decoratorAction is a Collins Action which is passed an AssetView (if a script) or templates a command based upon methods from the AssetView object (if a shell exec) and determines a String representation to assign to the tag.  In the case above, we call out to a CollinScript and, when rendering the HOSTNAME pseudo-tag for an asset, pass the AssetView corresponding to it to the CollinScript, which proceeds to render it as a String.

formatterAction takes the output from the metadata tag or decoratorAction as a String and passes it either to the shell or to a CollinScript, where it is processed and formatted into human-readable form.

List Headers:

List Headers were previously hardcoded, and this change introduces the ability to set defaults based upon either asset metadata tags or pseudo-tags like the above HOSTNAME.  Configuration for this feature can be found under conf/reference/list_reference.conf

Let me know what you think, and I very much appreciate the feedback!

Sussudio.