move keywords to end of font faces to avoid hilighting keywords found in
variable names
Update keywords for Puppet 3

Add the 'unless' statement and sync the list of builtin functions with
the 3.0 docs.
Use a more efficient regex for keywords

Use regexp-opt to generate the regex to match keywords instead of
building it up by hand. The generated regex should be more efficient
than just combining all the keywords with "\\|".
Fix #1889 - Align fat arrows

Format resource's attributes according to the style guide, section
9.2 "Arrow Alignment"[1].

Current behaviour:
I have a resource Exec['test']. If I indent the code (with for exemple `indent-region`), nothing happen.

    exec { 'test':
      subscribe => File['/etc/test'],
      refreshonly => true, | ;; cursor is here
    }

    Hit Tab, or select resource and call `indent-region`.

    exec { 'test':
      subscribe => File['/etc/test'],
      refreshonly => true, | ;; cursor is here
    }

New behaviour:
Same resource, attributes are formatted with Tab, C-m, C-j,
`indent-region`, etc.

    exec { 'test':
      subscribe => File['/etc/test'],
      refreshonly => true, | ;; <- cursor is here
    }

    Hit Tab. Attributes are formatted.

    exec { 'test':
      subscribe   => File['/etc/test'],
      refreshonly => true, | ;; <- cursor is here
    }

[1] http://docs.puppetlabs.com/guides/style_guide#arrow-alignment