Remove recursion for pypy compatibility.

The `assemble` function in `sections` module recurses to modify the
element tree to include sections and hgroups. Given `pypy`'s low
recursion depth support, its better to use a non recursive depth
first traversal of the element tree.

- Make `assemble` non recursive
- Ensure all element checks are against `None` to remove
  `FutureWarnings`
- Add a simple test for `sections`
- Ensure tests run on pypy