Valerie: added new interfaces; Knockout: fixed .register overloads

Valerie: added new interfaces; Knockout: fixed .register overloads, see #2732 
@conficient unfortunetely, you cannot do it in single interface. Need to create separate interfaces for each possible type of each property.
For example `template` can be `A` or `B` and `viewModel` can be `C` or `D` or `E`. So you need to create overloads like:
```ts
...(config: { template: A; viewModel: C });
...(config: { template: A; viewModel: D });
...(config: { template: A; viewModel?: E });
...(config: { template?: B; viewModel: C });
...(config: { template?: B; viewModel: D });
...(config: { template?: B; viewModel?: E });
```