OpenMC Python API

This pull requests includes a Python API to generate OpenMC XML input files. The API is in the ``src/utils/openmc`` directory. Now, when a user installs OpenMC, the Python API is also installed as the ``openmc`` Python package on the user's machine. The API should make it easy(ier) to write and easily modify input files for large, complex geometries. In addition, this added functionality makes it easier to use OpenMC for parametric optimization. The API should satisfy the complete XML input specifications as documented on OpenMC's website (though I may have missed something). 

The following is a rough breakdown of the files and Python classes included in this PR:

**settings.xml**
* Specifications implemented in ``settings.py``
* ``SettingsFile`` class

**materials.xml**
* Specifications implemented in ``nuclide.py``, ``element.py``, and ``material.py``
* ``Nuclide``, ``Element``, ``Material``, and ``MaterialsFile`` classes

**geometry.xml**
* Specifications implemented in ``surface.py``, ``universe.py`` and ``geometry.py``
* ``Surface`` and associated subclasses (*e.g.*, ``XPlane``, ``ZCylinder``, etc.), ``Cell``, ``Universe``, ``Lattice``, ``Geometry``, and ``GeometryFile`` classes

**tallies.xml**
* Specifications implemented in ``tallies.py``
* ``Mesh``, ``Filter``, ``Tally``, and ``TalliesFile`` classes

**plots.xml**
* Specifications implemented in ``plots.py``
* ``Plot`` and ``PlotsFile`` classes

All of the example input files in the ``examples`` directory were replicated into separate ``xml`` and ``python`` subdirectories. The ``python`` subdirectory includes ``build-xml.py`` files which generate all of the XML input files needed to run each case. The output from running the cases in the ``python`` subdirectory are slightly different than those in the ``xml`` subdirectory due to issue #330.

Finally, this PR is not ready to merge since it includes a compatibility module for OpenCSG, which is not yet open sourced. I mainly wanted to submit this PR to get some feedback from the core OpenMC developers which I can incorporate while waiting on OpenCSG to mature a bit. In addition, I wanted to communicate to  OpenMC users that the API is available since others may find it useful for their work.
Yes, I can see how this search could be an issue for complex geometries such as that one. Can you add a comment with your dictionary key check so that we're on the same page?

I think the "more elegant" approach might simply be to add a ``_exported_to_xml`` boolean indicator attribute to the ``Cell`` class. The ``Cell`` constructor would set this attribute to true ``False``, but the ``Cell.export_to_xml(...)`` routine would set it to ``True``. Then this search in the ``Universe.create_xml_subelement(...)`` routine would be modified as follows:

```python
# Iterate over all Cells
for cell_id, cell in self._cells.items():
    if not cell._exported_to_xml:

        # Create XML subelement for this Cell
        cell_subelement = cell.create_xml_subelement(xml_element)

        # Append the Universe ID to the subelement and add to Element
        cell_subelement.set("universe", str(self._id))

        ...
```