lib/blocklib: MDL-20146 - Don't mask errors as a way to ignore missing code files
Instead of simply ignoring all errors from blocks, allow the errors to be
exposed and test if the file exists. The previous solution makes it very
hard to debug problems with blocks and gives the 'white screen of death' even
with debugging set as high as it can go.
Also ensure that blocks without code are not added to the list of instances,
as I assume was the intended behaviour.