fix issue with missing metadata in canHarvestBlock()

- new isCarvable() check for blocks missing metadata
- also add a generic havestLevel check instead of an obsidian-only check