Observe with Watch and Validate

Observe with Watch and Validate

ViewModel contains Watch, Validation, Load and Action decorators to encapsulate common UI logic. Watch is used to watch changes on any property chain starting from 'this'. Watch decorator is applied on a read-only accessor which updates UI automatically when any of property referenced via this is updated. Validation is done via @Validate decorator on a read-only accessor. Validation is updated as soon as the property is modified. Only difference between Watch and Validate is, validate is only initialized when 'this.isValid' is requested first time in code.