Add custom kill-this-buffer command with diffs

Define a kill-this-buffer command that will show diffs between the
buffer and the file it is visiting, with a prompt to save the changes.

Also bind a key to kill-buffer-and-window.
Use company-mode for completion

Tweak the company key map to use some keys closer to what I use
elsewhere.

Also add a key binding to switch to the next backend, and a (temporary?)
key to show what backend is selected.

TBD: If I end up using multiple backends regularly, might want the
current backend to show up somewhere like the mode-line?
Enable projectile when it is first used

Projectile mode is turned on globally after a bit of idle time, but
sometimes I launch Emacs and immediately switch to a project. In that
case it was confusing that the projectile keys weren't set up yet -- so
make sure that projectile-global-mode is turned on when the library is
loaded, even if that happens before the idle timer fires.
Open the built-in elisp files read-only

Add a facility to treat certain directories as read-only by default. For
now, only using this for the Emacs install directory.

This avoids annoying save prompts when I accidentally modify something
while jumping around the source for the built-in packages.
Customize options

Trim the company-backends list and tweak a few other things.
Improved window handling

Add some 'undo' support for window commands.

Winner-mode keeps more history than I really need, so instead:

- When calling delete-other-windows, save the window configuration
 first so I can toggle back to it by just invoking the same command
 again. E.g. `M-1` makes one window fill the frame; `M-1` again restores
 the previous layout.

- When calling delete-window, save the window configuration first.
  Restore it by calling delete-window with a prefix argument.

TODO: Pull my various window split/delete commands in to a separate
package.