I went for a pure css solution, no js required. The css transitions I used are not fully cross browser, but they should degrade gracefully, and hey, if you want to use an inferior browser (read IE) you should expect an inferior browsing experience. 
My code looks like this (I simplified the HTML a little to make things a bit more readable):
<a class="hover-me">
    <span class="caption">VIEW</span>
    <img src="http://lorempixel.com/261/261/"/>
</a>
.hover-me {
    position: relative;
    width: 250px;
    display: inline-block;
}
.hover-me img{
    width:100%;
    height:auto;
    display: block;
}
.hover-me:after {
    content: '';
    position: absolute;
    top: 0; left: 0; right: 0; bottom: 0;
    z-index: 1;
    background: rgba(255,0,0,.5);
    transition: all .5s ease;
    opacity: 0;
}
.hover-me .caption {
    display: block;
    height: 50%;
    position: absolute;
    top: 50%;
    left: 0; right: 0;
    margin-top: -10px;
    text-align: center;
    transition: all .5s ease;
    opacity: 0;
    z-index: 2;
    color: #fff;
    line-height: 20px;    
}
.hover-me:hover:after , .hover-me:hover .caption {
    opacity: 1;
}
As you may notice:
 - the caption and overlay are hidden with the help of opacity, to make it trasitionable with css.
 - the stretching is done by adding a bottom: 0; or height: 100%;
 - the text is centered vertically by setting the top to 50% and setting the margin-top to half the height of the text
 - The overlay is achieved with a :after on the link, cause the caption has not got full height now. that is also the reason why the z-indexes are there, else the overlay would appear on top of the caption.
Don't forget to run your code trough something like prefixr (or use some less/sass mixins if you have them) to get the maximum cross browser support (for opacity an transition mainly)
I hope the code is clear. If not, feel free to ask.
I also updated your fiddle to demonstrate: http://jsfiddle.net/5X7ub/25/