sequence constructor API refactoring

Before this commit `Vector` functions were over-overloaded: call
to

```
Vector[T](a)
```

could interpret a as sequence or element parameter. This is
over-overloading that make code harder to read and maintain.

This commit changes sequence construction API. New convention is
proposed:

Let `Foo` be sequence type.

Calls

```
Foo(..args)
Foo[T](..args)
```

assume args are sequences. Call

```
foo(..args)
```

interpret args as elements for new foo sequence. Later call does
not work when args list is empty (because type parameter for Foo
cannot be infered and thus must be specified).

To deal with this problem, data.elements frameork is proposed:

```
Foo[T](elements(..args))
```

`elements` function with non-empty parameters list returns an array of arguments,
and `elements` with empty args returns special record NoElements, that has no type parameter
(thus `elements` function does not fail with empty args list unlike `vector`).

This patch changes vector, vectorQueue and deque.