Take extra care when accessing `props.children`

Deprecate `utils.modifyChildren` and `utils.filterChildren` in favour of new `ValidComponentChildren` functions, these functions wrap the `React.Children` implementations which is unsurprisingly more robust and covers more edge cases, with added checks to make sure it only operates on "valid components".

In addition to solving #87 this change now allows you to have `null` children for example:
```javascript
<TabbedArea>
  {aFalsyThing ? <TabPane /> : null}
  <TabPane />
</TabbedArea>
```

This change has touched most of the components but hasn't result in any API changes. We will also need to remember to remove `utils.modifyChildren` and `utils.filterChildren` in a few versions time.