guard other variables from the effect of setf

alistの内容を`setf`で変更すると、引数で渡した側の変数の内容も変更されてしまいます。
例えば、以下のようになってしまうので、
現状だと、`wmvc:build-buffer`に渡す変数を`copy-alist`などで守る必要が出てきます。

```lisp
(let* ((attrs '((hoge . "aaaa")
                (fuga . "bbbb")))
       (ctx (make-wmvc:context :attributes attrs))
       testv)
  (setq testv attrs)
  (wmvc:context-attr-set ctx 'fuga "cccc")
  attrs                          ; => ((hoge . "aaaa") (fuga . "cccc"))
  testv                          ; => ((hoge . "aaaa") (fuga . "cccc"))
  (wmvc:context-attributes ctx)) ; => ((hoge . "aaaa") (fuga . "cccc"))
```

仮に、この挙動を把握して実装されていたとしても、
(elispに対しての理解が浅い)ユーザ側に対して優しくない設計だと思うので、
`setf`による変更が外部に波及しないようにしました。

`wmvc:context-attr-set`で、`copy-alist`を使っていないのは、その方が
論理的に処理に沿っているし、メモリ消費的にも良いのではと思ったので。