Add a ":first" keyword for those occasions that it's necessary.
Changed :first to :pre-load.
Updated and extended documentation.
highlight use-package before typing package name

This follow the same pattern as the highlighting for provide and require
from `lisp-font-lock-keywords-2' in font-lock.el
Improve (describe-personal-keybindings) output

Create *Personal Keybindings* by with-output-to-temp-buffer. It
redirects standard output to the buffer and display it in help mode. So
we can get help mode keybindings such as "q" for free.

Quote the command-desc output so that it is made into a hyperlink.
Merge pull request #48 from aethanyc/improve-output-buffer

Improve (describe-personal-keybindings) output
Merge pull request #47 from npostavs/hilite-redux

highlight use-package before typing package name
Fix highlight use-package for Emacs snapshot

The commit a5edc94 fixed the highlight by following the regexp as for
require. However in Emacs truck, it only highlights first part of the
package name.

This change follows the regexp for require on emacs truck. See line
2327 on font-lock.el in the following patch.
http://bzr.savannah.gnu.org/lh/emacs/trunk/revision/111821
Merge pull request #49 from aethanyc/fix-highlight

Fix highlight use-package for Emacs snapshot
pass name (not name-string) to eval-after-load

Fixes #52: the :config block would be triggered when loading a config
file with the same name as the package and again when loading the
package itself.
Merge pull request #53 from npostavs/eval-after-name

pass name (not name-string) to eval-after-load
Enables using variables and functions as arguments

This change an extra level on indirection for two cases:

+ when an association or an alist is required, it is possible to pass a
variable containing an association or an alist
+ when a sexp to be evaluated is required, it is possible to pass a
function instead
Merge pull request #54 from dudebout/variable-and-function-support

Enables using variables and functions as arguments
Removes `plist-get-sexp`

This function was not working as advertised.
Then `funcall` was evaluated too early and all the benefits of late evaluation for autoloads was lost.
Furthermore, this function was not really needed in the first place:

```
(use-package foo
  :config my-foo-function)
```

can easily be replaced by the following:

```
(use-package foo
  :config (my-foo-function))
```
Merge pull request #55 from dudebout/fixes-#54

Removes `plist-get-sexp`
plist-get-value treats arg as backquoted

This allows use of variables or even arbitrary expressions to construct
use-package arguments:

(use-package some-package
  :mode ,mode-spec
  :bind (,binding
         ,@more-bindings
         ,@(cl-loop for i from ?a to ?z
                    collect `(,(string i) . nifty-function))))
use plist-get-value for all non-sexp args
Merge pull request #56 from npostavs/quasiquote

Quasiquote
Merge pull request #42 from phillord/first-keyword

Add a ":first" keyword for those occasions that it's necessary.
cl not needed since flet was removed in f96427a
macroexpand not needed

Since lambda thunking replaced quoting in 035b976.

To see why, observe that cases 3 and 4 disassemble to identical code.
The difference between cases 1 and 2 shows why the macroexpand was
needed originally.

(defmacro test-quote (name-string)
  `(eval-after-load "foo"
     `(with-elapsed-timer ,(format "Configuring package %s" name-string)
        (message "test-quote"))))

(defmacro test-expand-quote (name-string)
  `(eval-after-load "foo"
     ,(macroexpand-all
       `(with-elapsed-timer ,(format "Configuring package %s" name-string)
          (message "test-expand-quote")))))

(defmacro test-lambda (name-string)
  `(eval-after-load "foo"
     `(,(lambda ()
          (with-elapsed-timer ,(format "Configuring package %s" name-string)
            (message "test-lambda"))))))

(defmacro test-expand-lambda (name-string)
  `(eval-after-load "foo"
     `(,(lambda ()
          ,(macroexpand-all
            `(with-elapsed-timer ,(format "Configuring package %s" name-string)
               (message "test-lambda")))))))

(disassemble (lambda () (test-quote "testing...")))
(disassemble (lambda () (test-expand-quote "testing...")))
(disassemble (lambda () (test-lambda "testing...")))
(disassemble (lambda () (test-expand-lambda "testing...")))