Return empty list instead of raising NotFoundError

In most cases where previously a NotFoundError was raised, now simply an empty list is returned. This means it is not left to the user to catch an exception simply when no results are returned.

A NotFoundError is still raised if when attempting to construct a Compound from a CID using `Compound.from_cid(cid)` if the CID does not exists.
Make get_properties accept underscore style property names

The attributes on Compound objects are underscore separated, consistent with Python conventions. However this means they are inconsistent with the property names required by the PUG REST API. This commit allows underscore separated names to be used with the `get_properties` function, in addition to the previously supported CamelCase names.
Add more pandas functionality

This commit adds an `as_dataframe` parameter to the get_compounds, get_substances and get_properties functions. It also introduces functions for converting lists of Compounds or Substances to pandas DataFrames.