Added keyCount to ValueProvider trait

has default implementation of keySet.size, so it at a minimum enriches
the trait. For more specialized value providers this could be a method
of optimizing collection generation when knowing the size requirement,
particularly lists.