Given a 2D matrix representing a grid with potential obstructions, find the minimum number of steps required to navigate from the top-left corner to the bottom-right corner.
Use 0 for an open cell and 1 for an obstruction. Movement is allowed to any of the eight neighboring cells, including diagonals. Return -1 when the destination cannot be reached.
Input: grid, a non-empty rectangular list of lists. Output: an integer step count. For example, [[0,1,0],[0,0,1],[1,0,0]] returns 2, while a blocked start returns -1.
def minimum_steps(grid):