Data.Closure

Closure オブジェクトです。今のところ叩き台で、今後 `push -f` で容赦なく変更する可能性があります。
以下残タスク。

- [x] doc
- [x] spec
- [x] binding のキャプチャ問題(下記参照)
- [ ] from_command などでの with_context() 問題(下記参照)
- [x] Data.List 依存は微妙なので外したい

### binding のキャプチャ問題

```vim
let i = 0
let f = Closure.from_command(':let i += 1', l:)
for _ in range(10)
  call f.call()
endfor
echo i  " => 10
```

みたいなことがしたい。要は、from_command で、ローカル変数を変更した場合、binding も更新したい。
ただし、`from_command(cmd, l:, s:)` のように、binding は複数渡したい場合もあるので、その場合どうするか。

### from_command などでの with_context() 問題

`from_command` などで作成した Closure オブジェクトは、独自の構成を持っているので、`with_context()` などを使うとその構成が破壊されてしまう。仕様とするか、何かしらのケアをした方がいいか。