Changes to Placements to make errors clearer.

I've gone through to make some Flake8 corrections

I've added some Error types (`SubvertexAlreadyPlacedError` and
`ProcessorAlreadyOccupied`) which I think make it clearer what errors
have occurred.  From the point of view of calling code it makes sense to
have different Errors raised for different types of Error as it makes
catching specific errors easier.  My preference is for these to live in
the module that raises them, but I'm prepared for them to move if so
desired.

Additionally, `get_placement_of_subvertex` raises a `KeyError` if the
subvertex has not been placed.  This seems to be in line with what would
be expected.

Finally, I re-ordered `get_subvertex_on_processor` such that `None` was
returned from within the conditional (making it explicit why None was
returned).  I don't think this should raise an Exception.