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, it makes catching specific exceptions 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 querying the placement for a processor that does not have one should raise an Exception.